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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 80E39C433EF for ; Fri, 15 Apr 2022 06:31:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350490AbiDOGeO (ORCPT ); Fri, 15 Apr 2022 02:34:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53240 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350478AbiDOGeL (ORCPT ); Fri, 15 Apr 2022 02:34:11 -0400 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 877CA5C67C; Thu, 14 Apr 2022 23:31:42 -0700 (PDT) Received: from dggpemm500023.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Kfmd60fpyzFpXP; Fri, 15 Apr 2022 14:29:14 +0800 (CST) Received: from dggpemm500002.china.huawei.com (7.185.36.229) by dggpemm500023.china.huawei.com (7.185.36.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Fri, 15 Apr 2022 14:31:40 +0800 Received: from [10.174.178.178] (10.174.178.178) by dggpemm500002.china.huawei.com (7.185.36.229) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Fri, 15 Apr 2022 14:31:37 +0800 Message-ID: <9e3ca922-1448-2eb1-b056-218236e7c72f@huawei.com> Date: Fri, 15 Apr 2022 14:31:37 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.0.3 Subject: Re: [PATCH v10 06/14] mm: multi-gen LRU: minimal implementation To: Yu Zhao CC: Stephen Rothwell , , Andi Kleen , Andrew Morton , Aneesh Kumar , Barry Song <21cnbao@gmail.com>, Catalin Marinas , Dave Hansen , "Hillf Danton" , Jens Axboe , Jesse Barnes , Johannes Weiner , Jonathan Corbet , Linus Torvalds , "Matthew Wilcox" , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Rik van Riel , Vlastimil Babka , Will Deacon , Ying Huang , , , , , , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , =?UTF-8?Q?Holger_Hoffst=c3=a4tte?= , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain References: <20220407031525.2368067-1-yuzhao@google.com> <20220407031525.2368067-7-yuzhao@google.com> <71af92d2-0777-c318-67fb-8f7d52c800bb@huawei.com> <4c416f09-5304-07fd-cb53-5c9c8c75f6fa@huawei.com> From: Chen Wandun In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.174.178.178] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To dggpemm500002.china.huawei.com (7.185.36.229) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 在 2022/4/15 13:25, Yu Zhao 写道: > On Fri, Apr 15, 2022 at 10:23:18AM +0800, Chen Wandun wrote: >> 在 2022/4/15 4:53, Yu Zhao 写道: >>> On Thu, Apr 14, 2022 at 07:47:54PM +0800, Chen Wandun wrote: >>>> On 2022/4/7 11:15, Yu Zhao wrote: >>>>> +static void inc_min_seq(struct lruvec *lruvec) >>>>> +{ >>>>> + int type; >>>>> + struct lru_gen_struct *lrugen = &lruvec->lrugen; >>>>> + >>>>> + VM_BUG_ON(!seq_is_valid(lruvec)); >>>>> + >>>>> + for (type = 0; type < ANON_AND_FILE; type++) { >>>>> + if (get_nr_gens(lruvec, type) != MAX_NR_GENS) >>>>> + continue; >>>> I'm confused about relation between aging and LRU list operation. >>>> >>>> In function inc_max_seq,  both min_seq and max_seq will increase, >>>> the lrugen->lists[] indexed by lru_gen_from_seq(max_seq + 1) may >>>> be non-empty? >>> Yes. >>> >>>> for example, >>>> before inc_max_seq: >>>> min_seq == 0, lrugen->lists[0][type][zone] >>>> max_seq ==3, lrugen->lists[3][type][zone] >>>> >>>> after inc_max_seq: >>>> min_seq ==1, lrugen->lists[1][type][zone] >>>> max_seq ==4, lrugen->lists[0][type][zone] >>>> >>>> If lrugen->lists[0][type][zone] is not empty before inc_max_seq and it is >>>> the most inactive list,however lurgen->lists[0][type][zone] will become >>>> the most active list after inc_max_seq. >>> Correct. >>> >>>> So,  in this place, >>>> >>>> if (get_nr_gens(lruvec, type) != MAX_NR_GENS) >>>> continue; >>>> >>>> should change to >>>> >>>> if (get_nr_gens(lruvec, type) == MAX_NR_GENS) >>>> continue; >>> No, because max/min_seq will overlap if we do so. >>> >>> lrugen->lists[max_seq+1] can only be non-empty for anon LRU, for a >>> couple of reasons: >>> 1. We can't swap at all. >>> 2. Swapping is constrained, e.g., swapfile is full. >>> >>> Both cases are similar to a producer (the aging) overrunning a >>> consumer (the eviction). We used to handle them, but I simplified the >>> code because I don't feel they are worth handling [1]. >> Can lrugen->lists[max_seq+1]  also be non-empty for file LRU? > On reclaim path, no. But it can be forced to do so via debugfs. > >> such as in dont reclaim mapped file page case(isolation will fail). > You mean may_unmap=false? Pages stays in the same generation if > isolation fails. So lrugen->lists[min_seq] won't be empty in this > case. > >> If so, after aging, eviction will reclaim memory start from >> lrugen->lists[min_seq+1], but some oldest file page still >> remain in lrugen->lists[max_seq+1]. >> >> sort_folio can help to put misplaced pages to the right >> LRU list, but in this case, it does't help, because sort_folio >> only sort lrugen->lists[min_seq+1]. > On reclaim path, inc_max_seq() is only called when need_aging=true, > and this guarantees max_seq-min_seq[LRU_GEN_FILE]+1 < MAX_NR_GENS. yes, I think so, but I did't find the logical in function get_nr_evictable, or am I missing something         if (min_seq[LRU_GEN_FILE] + MIN_NR_GENS > max_seq)                 *need_aging = true;         else if (min_seq[LRU_GEN_FILE] + MIN_NR_GENS < max_seq)                 *need_aging = false;         else if (young * MIN_NR_GENS > total)                 *need_aging = true;         else if (old * (MIN_NR_GENS + 2) < total)                 *need_aging = true;         else                 *need_aging = false; Thanks > . 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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 7259EC433EF for ; Fri, 15 Apr 2022 06:42:38 +0000 (UTC) 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:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=T20Iou4O03NSCzLSOJShuQt+b72mvg8B9WJJtXOuBFo=; b=1lKXijxQYx5Lzr r39oJ7I3C6D4oDCE5HBtxQ+eWv59zDfuCybUEFKkAro6LXS7/zhWCbohaRLup4c+jdVsGmgvVBsY2 Qvpj0AR5MG1AlupLgxUDXn6oXJIQC5tGWAV8Hg1VHdekR718P7cD4qlKGnt9EeofKDOY+xEaqRiPx UzkB0sU+JG6po8q5W+cKTJGOUq/4sbkvzh+uihUgQqSY1haKkCZ3cdF5hy8GLQH8BX5y0D6Vy5Ojg cMgMsl8BZFis5S+HtV7JDmtolX78JaPmbuqrdsg4S2qTap4COvMh/aXCS2WjptC6bnh8Fu1yn0VAt qC6XNY50O7c9rRk+dRgg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nfFdv-00948w-Tk; Fri, 15 Apr 2022 06:41:20 +0000 Received: from szxga02-in.huawei.com ([45.249.212.188]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nfFUf-0090dG-H4 for linux-arm-kernel@lists.infradead.org; Fri, 15 Apr 2022 06:31:48 +0000 Received: from dggpemm500023.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Kfmd60fpyzFpXP; Fri, 15 Apr 2022 14:29:14 +0800 (CST) Received: from dggpemm500002.china.huawei.com (7.185.36.229) by dggpemm500023.china.huawei.com (7.185.36.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Fri, 15 Apr 2022 14:31:40 +0800 Received: from [10.174.178.178] (10.174.178.178) by dggpemm500002.china.huawei.com (7.185.36.229) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Fri, 15 Apr 2022 14:31:37 +0800 Message-ID: <9e3ca922-1448-2eb1-b056-218236e7c72f@huawei.com> Date: Fri, 15 Apr 2022 14:31:37 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.0.3 Subject: Re: [PATCH v10 06/14] mm: multi-gen LRU: minimal implementation To: Yu Zhao CC: Stephen Rothwell , , Andi Kleen , Andrew Morton , Aneesh Kumar , Barry Song <21cnbao@gmail.com>, Catalin Marinas , Dave Hansen , "Hillf Danton" , Jens Axboe , Jesse Barnes , Johannes Weiner , Jonathan Corbet , Linus Torvalds , "Matthew Wilcox" , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Rik van Riel , Vlastimil Babka , Will Deacon , Ying Huang , , , , , , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , =?UTF-8?Q?Holger_Hoffst=c3=a4tte?= , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain References: <20220407031525.2368067-1-yuzhao@google.com> <20220407031525.2368067-7-yuzhao@google.com> <71af92d2-0777-c318-67fb-8f7d52c800bb@huawei.com> <4c416f09-5304-07fd-cb53-5c9c8c75f6fa@huawei.com> From: Chen Wandun In-Reply-To: X-Originating-IP: [10.174.178.178] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To dggpemm500002.china.huawei.com (7.185.36.229) X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220414_233145_995446_A83C6E6E X-CRM114-Status: GOOD ( 15.01 ) 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 CgrlnKggMjAyMi80LzE1IDEzOjI1LCBZdSBaaGFvIOWGmemBkzoKPiBPbiBGcmksIEFwciAxNSwg MjAyMiBhdCAxMDoyMzoxOEFNICswODAwLCBDaGVuIFdhbmR1biB3cm90ZToKPj4g5ZyoIDIwMjIv NC8xNSA0OjUzLCBZdSBaaGFvIOWGmemBkzoKPj4+IE9uIFRodSwgQXByIDE0LCAyMDIyIGF0IDA3 OjQ3OjU0UE0gKzA4MDAsIENoZW4gV2FuZHVuIHdyb3RlOgo+Pj4+IE9uIDIwMjIvNC83IDExOjE1 LCBZdSBaaGFvIHdyb3RlOgo+Pj4+PiArc3RhdGljIHZvaWQgaW5jX21pbl9zZXEoc3RydWN0IGxy dXZlYyAqbHJ1dmVjKQo+Pj4+PiArewo+Pj4+PiArCWludCB0eXBlOwo+Pj4+PiArCXN0cnVjdCBs cnVfZ2VuX3N0cnVjdCAqbHJ1Z2VuID0gJmxydXZlYy0+bHJ1Z2VuOwo+Pj4+PiArCj4+Pj4+ICsJ Vk1fQlVHX09OKCFzZXFfaXNfdmFsaWQobHJ1dmVjKSk7Cj4+Pj4+ICsKPj4+Pj4gKwlmb3IgKHR5 cGUgPSAwOyB0eXBlIDwgQU5PTl9BTkRfRklMRTsgdHlwZSsrKSB7Cj4+Pj4+ICsJCWlmIChnZXRf bnJfZ2VucyhscnV2ZWMsIHR5cGUpICE9IE1BWF9OUl9HRU5TKQo+Pj4+PiArCQkJY29udGludWU7 Cj4+Pj4gSSdtIGNvbmZ1c2VkIGFib3V0IHJlbGF0aW9uIGJldHdlZW4gYWdpbmcgYW5kIExSVSBs aXN0IG9wZXJhdGlvbi4KPj4+Pgo+Pj4+IEluIGZ1bmN0aW9uIGluY19tYXhfc2VxLMKgIGJvdGgg bWluX3NlcSBhbmQgbWF4X3NlcSB3aWxsIGluY3JlYXNl77yMCj4+Pj4gdGhlIGxydWdlbi0+bGlz dHNbXSBpbmRleGVkIGJ5IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSArIDEpIG1heQo+Pj4+IGJl IG5vbi1lbXB0eT8KPj4+IFllcy4KPj4+Cj4+Pj4gZm9yIGV4YW1wbGUsCj4+Pj4gYmVmb3JlIGlu Y19tYXhfc2VxOgo+Pj4+IG1pbl9zZXEgPT0gMCwgbHJ1Z2VuLT5saXN0c1swXVt0eXBlXVt6b25l XQo+Pj4+IG1heF9zZXEgPT0zLCBscnVnZW4tPmxpc3RzWzNdW3R5cGVdW3pvbmVdCj4+Pj4KPj4+ PiBhZnRlciBpbmNfbWF4X3NlcToKPj4+PiBtaW5fc2VxID09MSwgbHJ1Z2VuLT5saXN0c1sxXVt0 eXBlXVt6b25lXQo+Pj4+IG1heF9zZXEgPT00LCBscnVnZW4tPmxpc3RzWzBdW3R5cGVdW3pvbmVd Cj4+Pj4KPj4+PiBJZiBscnVnZW4tPmxpc3RzWzBdW3R5cGVdW3pvbmVdIGlzIG5vdCBlbXB0eSBi ZWZvcmUgaW5jX21heF9zZXEgYW5kIGl0IGlzCj4+Pj4gdGhlIG1vc3QgaW5hY3RpdmUgbGlzdO+8 jGhvd2V2ZXIgbHVyZ2VuLT5saXN0c1swXVt0eXBlXVt6b25lXSB3aWxsIGJlY29tZQo+Pj4+IHRo ZSBtb3N0IGFjdGl2ZSBsaXN0IGFmdGVyIGluY19tYXhfc2VxLgo+Pj4gQ29ycmVjdC4KPj4+Cj4+ Pj4gU28swqAgaW4gdGhpcyBwbGFjZSwKPj4+Pgo+Pj4+IGlmIChnZXRfbnJfZ2VucyhscnV2ZWMs IHR5cGUpICE9IE1BWF9OUl9HRU5TKQo+Pj4+IAljb250aW51ZTsKPj4+Pgo+Pj4+IHNob3VsZCBj aGFuZ2UgdG8KPj4+Pgo+Pj4+IGlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1BWF9O Ul9HRU5TKQo+Pj4+IAljb250aW51ZTsKPj4+IE5vLCBiZWNhdXNlIG1heC9taW5fc2VxIHdpbGwg b3ZlcmxhcCBpZiB3ZSBkbyBzby4KPj4+Cj4+PiBscnVnZW4tPmxpc3RzW21heF9zZXErMV0gY2Fu IG9ubHkgYmUgbm9uLWVtcHR5IGZvciBhbm9uIExSVSwgZm9yIGEKPj4+IGNvdXBsZSBvZiByZWFz b25zOgo+Pj4gMS4gV2UgY2FuJ3Qgc3dhcCBhdCBhbGwuCj4+PiAyLiBTd2FwcGluZyBpcyBjb25z dHJhaW5lZCwgZS5nLiwgc3dhcGZpbGUgaXMgZnVsbC4KPj4+Cj4+PiBCb3RoIGNhc2VzIGFyZSBz aW1pbGFyIHRvIGEgcHJvZHVjZXIgKHRoZSBhZ2luZykgb3ZlcnJ1bm5pbmcgYQo+Pj4gY29uc3Vt ZXIgKHRoZSBldmljdGlvbikuIFdlIHVzZWQgdG8gaGFuZGxlIHRoZW0sIGJ1dCBJIHNpbXBsaWZp ZWQgdGhlCj4+PiBjb2RlIGJlY2F1c2UgSSBkb24ndCBmZWVsIHRoZXkgYXJlIHdvcnRoIGhhbmRs aW5nIFsxXS4KPj4gQ2FuIGxydWdlbi0+bGlzdHNbbWF4X3NlcSsxXcKgIGFsc28gYmUgbm9uLWVt cHR5IGZvciBmaWxlIExSVe+8nwo+IE9uIHJlY2xhaW0gcGF0aCwgbm8uIEJ1dCBpdCBjYW4gYmUg Zm9yY2VkIHRvIGRvIHNvIHZpYSBkZWJ1Z2ZzLgo+Cj4+IHN1Y2ggYXMgaW4gZG9udCByZWNsYWlt IG1hcHBlZCBmaWxlIHBhZ2UgY2FzZShpc29sYXRpb24gd2lsbCBmYWlsKS4KPiBZb3UgbWVhbiBt YXlfdW5tYXA9ZmFsc2U/IFBhZ2VzIHN0YXlzIGluIHRoZSBzYW1lIGdlbmVyYXRpb24gaWYKPiBp c29sYXRpb24gZmFpbHMuIFNvIGxydWdlbi0+bGlzdHNbbWluX3NlcV0gd29uJ3QgYmUgZW1wdHkg aW4gdGhpcwo+IGNhc2UuCj4KPj4gSWYgc28sIGFmdGVyIGFnaW5nLCBldmljdGlvbiB3aWxsIHJl Y2xhaW0gbWVtb3J5IHN0YXJ0IGZyb20KPj4gbHJ1Z2VuLT5saXN0c1ttaW5fc2VxKzFdLCBidXQg c29tZSBvbGRlc3QgZmlsZSBwYWdlIHN0aWxsCj4+IHJlbWFpbiBpbiBscnVnZW4tPmxpc3RzW21h eF9zZXErMV0uCj4+Cj4+IHNvcnRfZm9saW8gY2FuIGhlbHAgdG8gcHV0IG1pc3BsYWNlZCBwYWdl cyB0byB0aGUgcmlnaHQKPj4gTFJVIGxpc3QsIGJ1dCBpbiB0aGlzIGNhc2UsIGl0IGRvZXMndCBo ZWxwLCBiZWNhdXNlIHNvcnRfZm9saW8KPj4gb25seSBzb3J0IGxydWdlbi0+bGlzdHNbbWluX3Nl cSsxXS4KPiBPbiByZWNsYWltIHBhdGgsIGluY19tYXhfc2VxKCkgaXMgb25seSBjYWxsZWQgd2hl biBuZWVkX2FnaW5nPXRydWUsCj4gYW5kIHRoaXMgZ3VhcmFudGVlcyBtYXhfc2VxLW1pbl9zZXFb TFJVX0dFTl9GSUxFXSsxIDwgTUFYX05SX0dFTlMuCnllcywgSSB0aGluayBzbywgYnV0IEkgZGlk J3QgZmluZCB0aGUgbG9naWNhbCBpbiBmdW5jdGlvbiBnZXRfbnJfZXZpY3RhYmxlLApvciBhbSBJ IG1pc3Npbmcgc29tZXRoaW5nCgogwqDCoMKgwqDCoMKgwqAgaWYgKG1pbl9zZXFbTFJVX0dFTl9G SUxFXSArIE1JTl9OUl9HRU5TID4gbWF4X3NlcSkKIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAqbmVlZF9hZ2luZyA9IHRydWU7CiDCoMKgwqDCoMKgwqDCoCBlbHNlIGlmIChtaW5fc2Vx W0xSVV9HRU5fRklMRV0gKyBNSU5fTlJfR0VOUyA8IG1heF9zZXEpCiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKm5lZWRfYWdpbmcgPSBmYWxzZTsKIMKgwqDCoMKgwqDCoMKgIGVsc2Ug aWYgKHlvdW5nICogTUlOX05SX0dFTlMgPiB0b3RhbCkKIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAqbmVlZF9hZ2luZyA9IHRydWU7CiDCoMKgwqDCoMKgwqDCoCBlbHNlIGlmIChvbGQg KiAoTUlOX05SX0dFTlMgKyAyKSA8IHRvdGFsKQogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICpuZWVkX2FnaW5nID0gdHJ1ZTsKIMKgwqDCoMKgwqDCoMKgIGVsc2UKIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqbmVlZF9hZ2luZyA9IGZhbHNlOwoKVGhhbmtzCj4gLgoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1r ZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJu ZWwK