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=-5.5 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 autolearn=no 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 8E3FEC49361 for ; Thu, 17 Jun 2021 11:00:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6D952613DB for ; Thu, 17 Jun 2021 11:00:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232182AbhFQLCi (ORCPT ); Thu, 17 Jun 2021 07:02:38 -0400 Received: from szxga08-in.huawei.com ([45.249.212.255]:8257 "EHLO szxga08-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231559AbhFQLCg (ORCPT ); Thu, 17 Jun 2021 07:02:36 -0400 Received: from dggemv711-chm.china.huawei.com (unknown [172.30.72.56]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4G5Jqd2R89z1BNWY; Thu, 17 Jun 2021 18:55:25 +0800 (CST) Received: from dggema757-chm.china.huawei.com (10.1.198.199) by dggemv711-chm.china.huawei.com (10.1.198.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2176.2; Thu, 17 Jun 2021 19:00:27 +0800 Received: from [127.0.0.1] (10.69.38.203) by dggema757-chm.china.huawei.com (10.1.198.199) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.2; Thu, 17 Jun 2021 19:00:27 +0800 Subject: Re: [PATCH v6 2/2] drivers/perf: hisi: Add driver for HiSilicon PCIe PMU To: Will Deacon , Linuxarm CC: , , , , , References: <1622467951-32114-1-git-send-email-liuqi115@huawei.com> <1622467951-32114-3-git-send-email-liuqi115@huawei.com> <20210611162347.GA16284@willie-the-truck> <20210615093519.GB19878@willie-the-truck> <8e15e8d6-cfe8-0926-0ca1-b162302e52a5@huawei.com> <20210616134257.GA22905@willie-the-truck> From: "liuqi (BA)" Message-ID: <678f7d55-9408-f323-da53-b5afe2595271@huawei.com> Date: Thu, 17 Jun 2021 19:00:26 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20210616134257.GA22905@willie-the-truck> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 8bit X-Originating-IP: [10.69.38.203] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To dggema757-chm.china.huawei.com (10.1.198.199) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2021/6/16 21:42, Will Deacon wrote: > Hi, > > On Wed, Jun 16, 2021 at 09:54:23AM +0800, liuqi (BA) wrote: >> On 2021/6/15 17:35, Will Deacon wrote: >>> On Tue, Jun 15, 2021 at 04:57:09PM +0800, liuqi (BA) wrote: >>>> On 2021/6/12 0:23, Will Deacon wrote: >>>>> On Mon, May 31, 2021 at 09:32:31PM +0800, Qi Liu wrote: >>>>>> + /* Process data to set unit of latency as "us". */ >>>>>> + if (is_latency_event(idx)) >>>>>> + return div64_u64(data * us_per_cycle, data_ext); >>>>>> + >>>>>> + if (is_bus_util_event(idx)) >>>>>> + return div64_u64(data * us_per_cycle, data_ext); >>>>>> + >>>>>> + if (is_buf_util_event(idx)) >>>>>> + return div64_u64(data, data_ext * us_per_cycle); >>>>> >>>>> Why do we need to do all this division in the kernel? Can't we just expose >>>>> the underlying values and let userspace figure out what it wants to do with >>>>> the numbers? >>>>> >>>> Our PMU hardware support 8 sets of counters to count bandwidth, latency and >>>> utilization events. >>>> >>>> For example, when users set latency event, common counter will count delay >>>> cycles, and extern counter count number of PCIe packets automaticly. And we >>>> do not have a event number for counting number of PCIe packets. >>>> >>>> So this division cannot move to userspace tool. >>> >>> Why can't you expose the packet counter as an extra event to userspace? >>> >> Maybe I didn’t express it clearly. >> >> As there is no hardware event number for PCIe packets counting, extern >> counter count packets *automaticly* when latency events is selected by >> users. >> >> This means users cannot set "config=0xXX" to start packets counting event. >> So we can only get the value of counter and extern counter in driver and do >> the division, then pass the result to userspace. > > I still think it would be ideal if we could expose both values to userspace > rather than combine them somehow. Hmm. Anyway... > > I struggled to figure out exactly what's being counted from the > documentation patch (please update that). Please can you explain exactly > what appears in the HISI_PCIE_CNT and HISI_PCIE_EXT_CNT registers for the > different modes of operation? Without that, the ratios you've chosen to > report seem rather arbitrary. > Hi Will, PCIe PMU events can be devided into 2 types: one type is counted by HISI_PCIE_CNT, the other type is counted by HISI_PCIE_EXT_CNT and HISI_PCIE_CNT, including bandwidth events, latency events, buffer utilization and bus utilization. if user sets "event=0x10, subevent=0x02", this means "latency of RX memory read" is selected. HISI_PCIE_CNT counts total delay cycles and HISI_PCIE_EXT_CNT counts PCIe packets number at the same time. So PMU driver could obtain average latency by caculating: HISI_PCIE_CNT / HISI_PCIE_EXT_CNT. if users sets "event=0x04, subevent=0x01", this means bandwidth of RX memory read is selected. HISI_PCIE_CNT counts total packet data volume and HISI_PCIE_EXT_CNT counts cycles, so PMU driver could obtain average bandwidth by caculating: HISI_PCIE_CNT / HISI_PCIE_EXT_CNT. The same logic is used when calculating bus utilization and buffer utilization. Seems I should add this part in Document patch,I 'll do this in next version, thanks. > I also couldn't figure out how the latency event works. For example, I was > assuming it would be a filter (a bit like the length), so you could say > things like "I'm only interested in packets with a latency higher than x" > but it doesn't look like it works that way. > > Thanks, > latency is not a filter, PCIe PMU has a group of lactency events, their event number are within the latency_events_list, and the above explains how latency events work. PMU drivers have TLP length filter for bandwidth events, users could set like "I only interested in bandwidth of packets with TLP length bigger than x". Thanks, Qi > Will > . > 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=-5.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=no 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 A3AA2C49361 for ; Thu, 17 Jun 2021 11:02:26 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 65502613B9 for ; Thu, 17 Jun 2021 11:02:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 65502613B9 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:CC:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=C5P1OFi8UULNZZV3RCJ7kW7xUsZ5Rt7WriCZm70fuIg=; b=tRMUNf+e2iSpxuE7wxuP8q3VxO bPDVsj7qFZ1QULeImVc8j77J5k6GkDO9ufFStVDKN55Y1cknLe4Fe/YB2AUX8U9rnRxH9g2ZJXpDC owctSxCtMsscG6s2RNvNxYsaFP6j5T5MMBJBWsDG9wAMotnAQmm9ipFV23USD+0Gx9yYZjaUWjj5l mv2kvU9kLpxt3qZtaFDP2BRzSfZQtU6eUbVkWuKMx+QkD/e068yPIvjY0yya9DzODcxCh5jnF303f NAwGbQkcmL2ZYiqrh/BxVtzH5SB4dw1CHtp3ReqIV2WQ8FL/jehZnkP3O+cZRsmj3ldtIImqASKV+ OyVVsRrA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ltplI-009yIb-93; Thu, 17 Jun 2021 11:00:40 +0000 Received: from szxga08-in.huawei.com ([45.249.212.255]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ltplA-009yFE-Us for linux-arm-kernel@lists.infradead.org; Thu, 17 Jun 2021 11:00:34 +0000 Received: from dggemv711-chm.china.huawei.com (unknown [172.30.72.56]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4G5Jqd2R89z1BNWY; Thu, 17 Jun 2021 18:55:25 +0800 (CST) Received: from dggema757-chm.china.huawei.com (10.1.198.199) by dggemv711-chm.china.huawei.com (10.1.198.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2176.2; Thu, 17 Jun 2021 19:00:27 +0800 Received: from [127.0.0.1] (10.69.38.203) by dggema757-chm.china.huawei.com (10.1.198.199) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.2; Thu, 17 Jun 2021 19:00:27 +0800 Subject: Re: [PATCH v6 2/2] drivers/perf: hisi: Add driver for HiSilicon PCIe PMU To: Will Deacon , Linuxarm CC: , , , , , References: <1622467951-32114-1-git-send-email-liuqi115@huawei.com> <1622467951-32114-3-git-send-email-liuqi115@huawei.com> <20210611162347.GA16284@willie-the-truck> <20210615093519.GB19878@willie-the-truck> <8e15e8d6-cfe8-0926-0ca1-b162302e52a5@huawei.com> <20210616134257.GA22905@willie-the-truck> From: "liuqi (BA)" Message-ID: <678f7d55-9408-f323-da53-b5afe2595271@huawei.com> Date: Thu, 17 Jun 2021 19:00:26 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20210616134257.GA22905@willie-the-truck> Content-Language: en-GB X-Originating-IP: [10.69.38.203] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To dggema757-chm.china.huawei.com (10.1.198.199) X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210617_040033_391903_6B76B33A X-CRM114-Status: GOOD ( 27.64 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiAyMDIxLzYvMTYgMjE6NDIsIFdpbGwgRGVhY29uIHdyb3RlOgo+IEhpLAo+IAo+IE9uIFdl ZCwgSnVuIDE2LCAyMDIxIGF0IDA5OjU0OjIzQU0gKzA4MDAsIGxpdXFpIChCQSkgd3JvdGU6Cj4+ IE9uIDIwMjEvNi8xNSAxNzozNSwgV2lsbCBEZWFjb24gd3JvdGU6Cj4+PiBPbiBUdWUsIEp1biAx NSwgMjAyMSBhdCAwNDo1NzowOVBNICswODAwLCBsaXVxaSAoQkEpIHdyb3RlOgo+Pj4+IE9uIDIw MjEvNi8xMiAwOjIzLCBXaWxsIERlYWNvbiB3cm90ZToKPj4+Pj4gT24gTW9uLCBNYXkgMzEsIDIw MjEgYXQgMDk6MzI6MzFQTSArMDgwMCwgUWkgTGl1IHdyb3RlOgo+Pj4+Pj4gKwkvKiBQcm9jZXNz IGRhdGEgdG8gc2V0IHVuaXQgb2YgbGF0ZW5jeSBhcyAidXMiLiAqLwo+Pj4+Pj4gKwlpZiAoaXNf bGF0ZW5jeV9ldmVudChpZHgpKQo+Pj4+Pj4gKwkJcmV0dXJuIGRpdjY0X3U2NChkYXRhICogdXNf cGVyX2N5Y2xlLCBkYXRhX2V4dCk7Cj4+Pj4+PiArCj4+Pj4+PiArCWlmIChpc19idXNfdXRpbF9l dmVudChpZHgpKQo+Pj4+Pj4gKwkJcmV0dXJuIGRpdjY0X3U2NChkYXRhICogdXNfcGVyX2N5Y2xl LCBkYXRhX2V4dCk7Cj4+Pj4+PiArCj4+Pj4+PiArCWlmIChpc19idWZfdXRpbF9ldmVudChpZHgp KQo+Pj4+Pj4gKwkJcmV0dXJuIGRpdjY0X3U2NChkYXRhLCBkYXRhX2V4dCAqIHVzX3Blcl9jeWNs ZSk7Cj4+Pj4+Cj4+Pj4+IFdoeSBkbyB3ZSBuZWVkIHRvIGRvIGFsbCB0aGlzIGRpdmlzaW9uIGlu IHRoZSBrZXJuZWw/IENhbid0IHdlIGp1c3QgZXhwb3NlCj4+Pj4+IHRoZSB1bmRlcmx5aW5nIHZh bHVlcyBhbmQgbGV0IHVzZXJzcGFjZSBmaWd1cmUgb3V0IHdoYXQgaXQgd2FudHMgdG8gZG8gd2l0 aAo+Pj4+PiB0aGUgbnVtYmVycz8KPj4+Pj4KPj4+PiBPdXIgUE1VIGhhcmR3YXJlIHN1cHBvcnQg OCBzZXRzIG9mIGNvdW50ZXJzIHRvIGNvdW50IGJhbmR3aWR0aCwgbGF0ZW5jeSBhbmQKPj4+PiB1 dGlsaXphdGlvbiBldmVudHMuCj4+Pj4KPj4+PiBGb3IgZXhhbXBsZSwgd2hlbiB1c2VycyBzZXQg bGF0ZW5jeSBldmVudCwgY29tbW9uIGNvdW50ZXIgd2lsbCBjb3VudCBkZWxheQo+Pj4+IGN5Y2xl cywgYW5kIGV4dGVybiBjb3VudGVyIGNvdW50IG51bWJlciBvZiBQQ0llIHBhY2tldHMgYXV0b21h dGljbHkuIEFuZCB3ZQo+Pj4+IGRvIG5vdCBoYXZlIGEgZXZlbnQgbnVtYmVyIGZvciBjb3VudGlu ZyBudW1iZXIgb2YgUENJZSBwYWNrZXRzLgo+Pj4+Cj4+Pj4gU28gdGhpcyBkaXZpc2lvbiBjYW5u b3QgbW92ZSB0byB1c2Vyc3BhY2UgdG9vbC4KPj4+Cj4+PiBXaHkgY2FuJ3QgeW91IGV4cG9zZSB0 aGUgcGFja2V0IGNvdW50ZXIgYXMgYW4gZXh0cmEgZXZlbnQgdG8gdXNlcnNwYWNlPwo+Pj4KPj4g TWF5YmUgSSBkaWRu4oCZdCBleHByZXNzIGl0IGNsZWFybHkuCj4+Cj4+IEFzIHRoZXJlIGlzIG5v IGhhcmR3YXJlIGV2ZW50IG51bWJlciBmb3IgUENJZSBwYWNrZXRzIGNvdW50aW5nLCBleHRlcm4K Pj4gY291bnRlciBjb3VudCBwYWNrZXRzICphdXRvbWF0aWNseSogd2hlbiBsYXRlbmN5IGV2ZW50 cyBpcyBzZWxlY3RlZCBieQo+PiB1c2Vycy4KPj4KPj4gVGhpcyBtZWFucyB1c2VycyBjYW5ub3Qg c2V0ICJjb25maWc9MHhYWCIgdG8gc3RhcnQgcGFja2V0cyBjb3VudGluZyBldmVudC4KPj4gU28g d2UgY2FuIG9ubHkgZ2V0IHRoZSB2YWx1ZSBvZiBjb3VudGVyIGFuZCBleHRlcm4gY291bnRlciBp biBkcml2ZXIgYW5kIGRvCj4+IHRoZSBkaXZpc2lvbiwgdGhlbiBwYXNzIHRoZSByZXN1bHQgdG8g dXNlcnNwYWNlLgo+IAo+IEkgc3RpbGwgdGhpbmsgaXQgd291bGQgYmUgaWRlYWwgaWYgd2UgY291 bGQgZXhwb3NlIGJvdGggdmFsdWVzIHRvIHVzZXJzcGFjZQo+IHJhdGhlciB0aGFuIGNvbWJpbmUg dGhlbSBzb21laG93LiBIbW0uIEFueXdheS4uLgo+IAo+IEkgc3RydWdnbGVkIHRvIGZpZ3VyZSBv dXQgZXhhY3RseSB3aGF0J3MgYmVpbmcgY291bnRlZCBmcm9tIHRoZQo+IGRvY3VtZW50YXRpb24g cGF0Y2ggKHBsZWFzZSB1cGRhdGUgdGhhdCkuIFBsZWFzZSBjYW4geW91IGV4cGxhaW4gZXhhY3Rs eQo+IHdoYXQgYXBwZWFycyBpbiB0aGUgSElTSV9QQ0lFX0NOVCBhbmQgSElTSV9QQ0lFX0VYVF9D TlQgcmVnaXN0ZXJzIGZvciB0aGUKPiBkaWZmZXJlbnQgbW9kZXMgb2Ygb3BlcmF0aW9uPyBXaXRo b3V0IHRoYXQsIHRoZSByYXRpb3MgeW91J3ZlIGNob3NlbiB0bwo+IHJlcG9ydCBzZWVtIHJhdGhl ciBhcmJpdHJhcnkuCj4gCgpIaSBXaWxsLAoKUENJZSBQTVUgZXZlbnRzIGNhbiBiZSBkZXZpZGVk IGludG8gMiB0eXBlczogb25lIHR5cGUgaXMgY291bnRlZCBieSAKSElTSV9QQ0lFX0NOVCwgdGhl IG90aGVyIHR5cGUgaXMgY291bnRlZCBieSBISVNJX1BDSUVfRVhUX0NOVCBhbmQgCkhJU0lfUENJ RV9DTlQsIGluY2x1ZGluZyBiYW5kd2lkdGggZXZlbnRzLCBsYXRlbmN5IGV2ZW50cywgYnVmZmVy IAp1dGlsaXphdGlvbiBhbmQgYnVzIHV0aWxpemF0aW9uLgoKaWYgdXNlciBzZXRzICJldmVudD0w eDEwLCBzdWJldmVudD0weDAyIiwgdGhpcyBtZWFucyAibGF0ZW5jeSBvZiBSWCAKbWVtb3J5IHJl YWQiIGlzIHNlbGVjdGVkLiBISVNJX1BDSUVfQ05UIGNvdW50cyB0b3RhbCBkZWxheSBjeWNsZXMg YW5kIApISVNJX1BDSUVfRVhUX0NOVCBjb3VudHMgUENJZSBwYWNrZXRzIG51bWJlciBhdCB0aGUg c2FtZSB0aW1lLiBTbyBQTVUgCmRyaXZlciBjb3VsZCBvYnRhaW4gYXZlcmFnZSBsYXRlbmN5IGJ5 IGNhY3VsYXRpbmc6IEhJU0lfUENJRV9DTlQgLyAKSElTSV9QQ0lFX0VYVF9DTlQuCgppZiB1c2Vy cyBzZXRzICJldmVudD0weDA0LCBzdWJldmVudD0weDAxIiwgdGhpcyBtZWFucyBiYW5kd2lkdGgg b2YgUlggCm1lbW9yeSByZWFkIGlzIHNlbGVjdGVkLiBISVNJX1BDSUVfQ05UIGNvdW50cyB0b3Rh bCBwYWNrZXQgZGF0YSB2b2x1bWUgCmFuZCBISVNJX1BDSUVfRVhUX0NOVCBjb3VudHMgY3ljbGVz LCBzbyBQTVUgZHJpdmVyIGNvdWxkIG9idGFpbiBhdmVyYWdlIApiYW5kd2lkdGggYnkgY2FjdWxh dGluZzogSElTSV9QQ0lFX0NOVCAvIEhJU0lfUENJRV9FWFRfQ05ULgoKVGhlIHNhbWUgbG9naWMg aXMgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIGJ1cyB1dGlsaXphdGlvbiBhbmQgYnVmZmVyIAp1dGls aXphdGlvbi4gU2VlbXMgSSBzaG91bGQgYWRkIHRoaXMgcGFydCBpbiBEb2N1bWVudCBwYXRjaCxJ ICdsbCBkbyAKdGhpcyBpbiBuZXh0IHZlcnNpb24sIHRoYW5rcy4KCj4gSSBhbHNvIGNvdWxkbid0 IGZpZ3VyZSBvdXQgaG93IHRoZSBsYXRlbmN5IGV2ZW50IHdvcmtzLiBGb3IgZXhhbXBsZSwgSSB3 YXMKPiBhc3N1bWluZyBpdCB3b3VsZCBiZSBhIGZpbHRlciAoYSBiaXQgbGlrZSB0aGUgbGVuZ3Ro KSwgc28geW91IGNvdWxkIHNheQo+IHRoaW5ncyBsaWtlICJJJ20gb25seSBpbnRlcmVzdGVkIGlu IHBhY2tldHMgd2l0aCBhIGxhdGVuY3kgaGlnaGVyIHRoYW4geCIKPiBidXQgaXQgZG9lc24ndCBs b29rIGxpa2UgaXQgd29ya3MgdGhhdCB3YXkuCj4gCj4gVGhhbmtzLAo+IApsYXRlbmN5IGlzIG5v dCBhIGZpbHRlciwgUENJZSBQTVUgaGFzIGEgZ3JvdXAgb2YgbGFjdGVuY3kgZXZlbnRzLCB0aGVp ciAKZXZlbnQgbnVtYmVyIGFyZSB3aXRoaW4gdGhlIGxhdGVuY3lfZXZlbnRzX2xpc3QsIGFuZCB0 aGUgYWJvdmUgZXhwbGFpbnMgCmhvdyBsYXRlbmN5IGV2ZW50cyB3b3JrLgoKUE1VIGRyaXZlcnMg aGF2ZSBUTFAgbGVuZ3RoIGZpbHRlciBmb3IgYmFuZHdpZHRoIGV2ZW50cywgdXNlcnMgY291bGQg c2V0IApsaWtlICJJIG9ubHkgaW50ZXJlc3RlZCBpbiBiYW5kd2lkdGggb2YgcGFja2V0cyB3aXRo IFRMUCBsZW5ndGggYmlnZ2VyIAp0aGFuIHgiLgoKVGhhbmtzLApRaQoKPiBXaWxsCj4gLgo+IAoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFy bS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1r ZXJuZWwK