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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 30071C636D4 for ; Tue, 7 Feb 2023 16:23:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B57B36B00D5; Tue, 7 Feb 2023 11:23:40 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id ADEE56B00F8; Tue, 7 Feb 2023 11:23:40 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 90B626B00FA; Tue, 7 Feb 2023 11:23:40 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 806826B00D5 for ; Tue, 7 Feb 2023 11:23:40 -0500 (EST) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 277891C6038 for ; Tue, 7 Feb 2023 16:23:40 +0000 (UTC) X-FDA: 80441016600.04.4610270 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2043.outbound.protection.outlook.com [40.107.243.43]) by imf17.hostedemail.com (Postfix) with ESMTP id 476F940009 for ; Tue, 7 Feb 2023 16:23:37 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=HjfvdvDS; arc=pass ("microsoft.com:s=arcselector9901:i=1"); spf=pass (imf17.hostedemail.com: domain of ziy@nvidia.com designates 40.107.243.43 as permitted sender) smtp.mailfrom=ziy@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1675787017; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=sZNUWQ1c2l+FCgPUleF8hXfZnfqRVEc740h/+56xLlg=; b=0O47UCf5n64nRgK6JK1Xj9En4o7IwpBupyeGP63QX62VSIvjxYVfHf5LuPSrr7DNS8usxE eFVdOlwy13Kxy+Zr9BptOeb0l+MVLong/OFSo4GuNa4MmtCXYM9m6j1Yl+I54WJLKBubsp 7o6SxZBXlMDY7YetWMUQWKjqnlbALQE= ARC-Authentication-Results: i=2; imf17.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=HjfvdvDS; arc=pass ("microsoft.com:s=arcselector9901:i=1"); spf=pass (imf17.hostedemail.com: domain of ziy@nvidia.com designates 40.107.243.43 as permitted sender) smtp.mailfrom=ziy@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1675787017; a=rsa-sha256; cv=pass; b=EoIGZaD8MZnHEWkTrun7elg8ibvWpymfItARsWsW9bV+LNOpS+UcGUbcBB9qlPFLB6c9AD rOIUV2Iz+9nRueIZ5FuxEy822ULU9dK1OfVOFcGg4PXZFFU+h2vCgPBU9a+eX8Ulgqm2m1 YlX5qnSEgXacJq+zx4bKI+oOtCwFqwk= ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DIeE7zh3u+GgVo7PRGgTmavAqsOPbtGdAteX9v3r1csRUGNwRes7b/5kKpi0ojkmnOrMQ+BxqRAcXok8LYz4e1x9SbJ1jv1clH6qDGk5zknVotpxB5ZOwSOZw4EiW35KQ89P4JJmg4ZfeDsnM4VD/uzV5cIJiIQpg/etgoKyictAyaSUAXczd9BPr1Y4TGmmgovLKgtpMVdnb9ksIjwaX2Nz9Jzc141hV5s+3IAInQBt/+3GOQgX6KT8S38VlD9qPwtrSiSkt+E15gmf1GIBIHYSoN4Y/CuEUrEBimacOR0UFTPJr8oZu7yihlQ2iSLU7SkYVA4VmhN4cho+nXpGFw== 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=sZNUWQ1c2l+FCgPUleF8hXfZnfqRVEc740h/+56xLlg=; b=MB2kbI57cxJd6K84Hb6oEfjA37moNPjQD1mqR0YyqEsRULDYmCQD72DY8O2yLXt9ng7OwycYhcSxDaw2hNQUrUDS9Opsn31WtTKU4k6WRg9BwcTJziRFhuwTMOvTiKomCLAnm5l8fl995lIesgeUH28A6xiypF95yicwQjL/XQc2i11uQZhLrGes65W9xnmH4JiYAv9vcv/jrUKN41kiLwfcJE+nk0MVgANeskbtufmaUORiZHRDGo/T4CRpLP5ATOSwkTJ0UIjLmwutAdaaHx9tUDrXHR2TDeWTZehRsEGqC4ey+ErOci6hT3ornWZ2IvEeXSlV3Mk7lPkSEJv0oA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sZNUWQ1c2l+FCgPUleF8hXfZnfqRVEc740h/+56xLlg=; b=HjfvdvDSgz6Swr6ciSMVZPQgg6b7F3YryciP2/YvPRvgZGmIT84Dyt+4FLkjGEg0yCymXOz1Flxcb0jReV0oX9L2+m0qu+0VxqcQ3iI4nVnbhozPHRCDxXtAsPVHNlRsVFZX22+YhrkoUSdxsx3DCjgrNRaO2RJoVwEbywoeN4N2kwyWx91+1MhpdNm0eoz93zSl03FRGdABPDnPqGTd5UGAFX9qkIJsATlgyCQwk3/NQqmpt/Zxbtoedi42tZYAmUeX4sa1szyOUlg2G83SWKGDrrr/BTVNOpHpChXQ78d3WJ3/HslsI0kdcflZya9aQrYuR1z76oBSR8qvIsc9EA== Received: from DS7PR12MB5744.namprd12.prod.outlook.com (2603:10b6:8:73::18) by SN7PR12MB6742.namprd12.prod.outlook.com (2603:10b6:806:26e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6064.25; Tue, 7 Feb 2023 16:23:33 +0000 Received: from DS7PR12MB5744.namprd12.prod.outlook.com ([fe80::2585:153b:98ea:3e23]) by DS7PR12MB5744.namprd12.prod.outlook.com ([fe80::2585:153b:98ea:3e23%9]) with mapi id 15.20.6064.036; Tue, 7 Feb 2023 16:23:33 +0000 From: Zi Yan To: Matthew Wilcox Cc: linux-mm@kvack.org, Vishal Moola , Hugh Dickins , Rik van Riel , David Hildenbrand , "Yin, Fengwei" Subject: Re: Folio mapcount Date: Tue, 07 Feb 2023 11:23:31 -0500 X-Mailer: MailMate (1.14r5937) Message-ID: In-Reply-To: References: Content-Type: multipart/signed; boundary="=_MailMate_136FC8BA-5501-48B8-BF0D-A2B4C868590A_="; micalg=pgp-sha512; protocol="application/pgp-signature" X-ClientProxiedBy: MN2PR13CA0034.namprd13.prod.outlook.com (2603:10b6:208:160::47) To DS7PR12MB5744.namprd12.prod.outlook.com (2603:10b6:8:73::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB5744:EE_|SN7PR12MB6742:EE_ X-MS-Office365-Filtering-Correlation-Id: f8a1f677-35f5-4a0d-5a0b-08db0927a829 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1NbGBrPZBvUr928B9GYukECRD4+a+SlKZ/niAb1UfWPXTgVE6oyNy05Q7iT02wEmjSL6zWkgvjVSpoMVMqmR1BqWEmDx4Safo5PZRIzTOCcf8Y1owT1ahBn9cnY/93I4MT+LxPRHpdlT04jBymlIk5hOzlMuo5L5Rr+1lG1B9qezsAn4J8omKSX1G0qEApHr48hnDM3HF50dMxNXEPyJqpQTqIv98ZLW3258jhuMQ+4oQc/UfQ2ZuRHrU//PZ+daSn0Ow9welkHVU+BcDH2wNvg2mti6TM9PD3JNX2wFTawyrI9YMkgtT9MeScRs4bD4oKNqCSBvn9bIrtZbMrz7iaEnNlJHVwejSTY7/sJmxLT51uLqfEGnfkcNR6VuoSvrmMgXOsmGHsxI/rc2xDtOF7ASc1QN2IbHeI/Qc8m5jwAJseICfeBeeydZSCjyufTd3zOTnNt1/A1tfnSABAMBzZkFQL4py59Tp9tjSRjr7/H/0yXt2hDUbUGgS29K8NzcnSE57S/K0wdsAo2h5wQ7HCUFWJEYYRc4jF/iubkN3zlu7D44CPj/Lqa6KUlTDHQ7mGmqLTrCkeHlcmuVrFXRx8pAC7ne8omnPFJaJ7OnAlqotavMC0+SOW/jrd1XcERK8nG5bhSWfrHO2GiidSGL4CPa8V5DGcUoj+Utem+EuesXhHwNsLxH5vY+SjN7TowsAhha7pgEPW5FjvvoYE5Cf1fmOyGm8+78hB5qVS1kIUA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR12MB5744.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(4636009)(39860400002)(396003)(136003)(366004)(376002)(346002)(451199018)(3480700007)(83380400001)(54906003)(2616005)(2906002)(316002)(186003)(36756003)(33656002)(38100700002)(66946007)(6506007)(53546011)(26005)(6916009)(8676002)(7116003)(4326008)(6512007)(6486002)(66556008)(8936002)(86362001)(235185007)(41300700001)(66476007)(478600001)(5660300002)(72826004)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?u1K1pzyMt+RdPfpRM2Zln86EjbPS2216YI6FGEbF9YEXmWm3N0SW7zTWFJxW?= =?us-ascii?Q?X/Qe4UfWMo0ZtDRHzCEaZgU4yoFwVgeIEUnbdu2LavS5t+iCkyxDSNXHIVX1?= =?us-ascii?Q?vnqOq61pI2Nhsr6fElW/AUeNWwT2XTnIJkRHF8leEbvYiXyK6PJcPvYngeCs?= =?us-ascii?Q?TkE1vLJv2XT9+krOJRvlXJ3BbvCCuGANfX9id0Pb8tKAaoBvZCt5OLzq+unZ?= =?us-ascii?Q?ULK1mKiD1D7iAHBa+I1YemanFE6/Hihx2tTUJsDENq4Ajv3vcYBpffz2UV69?= =?us-ascii?Q?WAD+h9F/Un+jctLz9o64LZ8lqZBWzG8inyPNhf7x0Bbeh7N3/S6T8C/vbdUI?= =?us-ascii?Q?dOh+Syf1yJHO68mLvgdny/FTM/Am8+zpKp6drSwRcjnA7fL/JbaMBnCeNRha?= =?us-ascii?Q?Waa81dWe5qBKX35cgpnHKLXRv0i1J9EspKaTWK0aWA3Q4LZcCAJbEy+ETEaW?= =?us-ascii?Q?maz9SyXfXVHAfuLtJj1tBIWONXWVnJq1/LgoeLV9beUWEX0BJERRW36E9N6i?= =?us-ascii?Q?zTf6tZxm+HqP2DSOFyWYFNILGmY4z55g4a1QN03gr+osNCfC1oomPG7cITv/?= =?us-ascii?Q?Mphl3D+fieNxw9FGohxMLgMK2/WnMLaB70701WkVYxi2cmHctgOVCyELw3c8?= =?us-ascii?Q?lRcuWVOTngqSjOZ4ESWr3QB4iJD7VxtW/RiHM4oLYGojYVUDIT84ctvrbFUo?= =?us-ascii?Q?wvS/zKrX+UGd7tPy0QslRDf63nRITrQVyziR4E2r/NG4MVpRuL1RDI/IGmoP?= =?us-ascii?Q?DtRDf6wmeXCTpfYTEvInopiPJl6UD/BM6lyjPL5eGzp9LWtmJYpcbkta0aUm?= =?us-ascii?Q?XGmkkXx3qmNYTCq0+FXZdNNL17aUrPa7Ie+PQZPIjPSDaXI9o1+WX3zmaBbS?= =?us-ascii?Q?mNHSgU54ED/aA4fpF09sMXX1tbSLDw3a9VoHPii7oHAzsf/pmEKbXKpbqgZm?= =?us-ascii?Q?oFWkdEZVodXX6MdznEnC9fzbHVR6+GClqs1BiHGlkvRtgXH6w+oKT9T4j2RQ?= =?us-ascii?Q?Al8D5gNwdTpVL/z4EKQhnZgzbQlTWYpB7/bgGTs9HoAAERDpsa6pyhmvjusR?= =?us-ascii?Q?DmR2H0o7dICCYWAleeD8VwS9d5BmUI0pzbhykZVD0xQzL2g0kV7sH5225NF5?= =?us-ascii?Q?KOLVtnKj/dDtHx7xWhVtdft5la2BTegnpZnPLqfND6LzZdXy1CRxtzal1Ur5?= =?us-ascii?Q?Wh0NXeStzWfa+1mFt8oGIkkFFOmHnQlTPQz3tUPlUjyZLF+7YjeaUKZ2bkq2?= =?us-ascii?Q?ilfuJFjoJCqcnwm2znRXH2PkDMzdIlVHYGVuSV2OiMxO11WnpTqYYa1pIyjy?= =?us-ascii?Q?idKQzKcaJY7awVuzkyPUxwT9D7Bu/BOW/qqFIhWPaQLYIJGzHKVmI25EGa8q?= =?us-ascii?Q?Ly0DIRKgz0eoXR1wkquy4HOeozBX2zID3I3BDZcCZy6m2Yn7wA992GhwstUB?= =?us-ascii?Q?Sgmv3FrAGtEoQpHC+DmoF9IcpwJpd1mMUG+h7XAV0HL1SOQFgC584KIF1pbA?= =?us-ascii?Q?kRIQ5coGdfvzcUR6W914YeQWklkaF6RgU4p5AxhtW6AIUinwpAhdY/Iyk485?= =?us-ascii?Q?NF+QKBOGdCAgAUOrbEyt/g7lOmsPRWohXNrFM74W?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f8a1f677-35f5-4a0d-5a0b-08db0927a829 X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB5744.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Feb 2023 16:23:33.4276 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Xlc8hIZP5q6jLZpbZ/yLYjNFevqcGRS4pWL9q5mPFM0D0JiL1b/bwb/xV1IXG7Z0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB6742 X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 476F940009 X-Stat-Signature: f3zi58j4kc8txkgoa8gcq435oe3rgf6r X-Rspam-User: X-HE-Tag: 1675787017-438676 X-HE-Meta: U2FsdGVkX1/Fi+MsEKIW7ruPQmVNhUyQR/mXi5+9T/wFP6bzMnFsY0ws8TKXuZ/9pjsgH+n8mNuHBLQnjFsGyzkzF1hFPoMxgn/Zd+h4OaFa/tLli0SDPlONcoBfG7kmGDs8TydinJaBhlzPLQg8JfrEqtXSg6fShDh7Zo5oNGVY+2paUJw4rETdZkDhdJwD8ZzmIH1FDgbiBV1av9ZBrJnlhKVvyCsiE2OYGrOvucDy9U9UVmneN7Ra6fvgZhAbjeWKf0l7mftiWJjKexaQhdWhJInyrvZHS1ym7V89t++UvlnwhsPvN44GS3kxnUidIQV0SVh8M3tpvpNK+30fDPGsMKDQBPIsxTEglP9WsIoNtax7ODE08fE/5P/Vtq24ShXN0hhMkXJzDead3OEEP4bIUqXtkItE5gtZ6cY1I8sEZ+IzHLQf3jtUrMhfZzcXH163eXthUeXZXJM0JEZMbC6aQiYag5HReVYIeh0trhMv4ENuDeykEKgNfU5iGLdOynuCnFRPgzAGto0xcVCdyaprnMSdf9ir//6U2glHVCM/Sldcf4d5wtb24iKyZDDkzX7a3lG9b5xmV0V4ibR7PakwR3CWSz6NaWWTHgBG0JsLOhjNh9OSt/cwcgSnE+i7g226Jis9UDNhhLgiK86twKHVFjXNMT9JlMU+gqd+NjtA5EYD/+4H5UyFSvR84bV4xdGm+JrDtJPJfMB0+N+S7KCbTXZVzl/DT4c6rIKcQGhrUw4ICvRDEHQ6wu9yKb/s2OoorRaQuG4GMLgwz7nafD2AnY3vhSlLNi7KG+v6wzCV2oi/7N0cvsc565UviVRmSBgHxlyyaOOrMxyyz3VWkyM2b+bNpuCGmkbRyPzP4AsFeSSOLOTJh0pxOst4YpA7biSoqUrYEqubv7bci/C1uiP23ISrDkQSheBLDwiJkru9Du6XbD/cKkaSHyNv5ziALyPx5x2ZkbwFZV4Ge+h BfsoMZor j5LpwLEmqBwuxZD+tV4tPBHo+2PQ+nM4gu8+lfgj+eqIcTXS0PFsew3nGk0N0jgJT+HSR03rrA2kLIGLImudS6HTjoQo9dFU6QJ0x5M0D8JVdubt97r3frW2n6PovnnXQEA7iFuoQZmizLsF06QOMbqLa3sS40wM0qIM14noXkMAruYjKq8Gwbel1Q7ojILyo6ENro+3YabTvwgrGtglMIuMRP3IF1OHrGMTgqE1okCT5vVqSuagI3f87Pq7lN6aE8os0QOihmw4/8Sja2RsXJtEre8lxGRKpAhS+xsrnVvn41ERp+4REeB2SuTt4l55H8dnW6G+fhVrBdl0nVh8EnFDYuqv8HN4KESvpSrw3pq5rqJPfiU39jYbKgAFRErdrak/O X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: --=_MailMate_136FC8BA-5501-48B8-BF0D-A2B4C868590A_= Content-Type: text/plain On 24 Jan 2023, at 13:13, Matthew Wilcox wrote: > Once we get to the part of the folio journey where we have > one-pointer-per-page, we can't afford to maintain per-page state. > Currently we maintain a per-page mapcount, and that will have to go. > We can maintain extra state for a multi-page folio, but it has to be a > constant amount of extra state no matter how many pages are in the folio. > > My proposal is that we maintain a single mapcount per folio, and its > definition is the number of (vma, page table) tuples which have a > reference to any pages in this folio. How about having two, full_folio_mapcount and partial_folio_mapcount? If partial_folio_mapcount is 0, we can have a fast path without doing anything at page level. > > I think there's a good performance win and simplification to be had > here, so I think it's worth doing for 6.4. > > Examples > -------- > > In the simple and common case where every page in a folio is mapped > once by a single vma and single page table, mapcount would be 1 [1]. > If the folio is mapped across a page table boundary by a single VMA, > after we take a page fault on it in one page table, it gets a mapcount > of 1. After taking a page fault on it in the other page table, its > mapcount increases to 2. > > For a PMD-sized THP naturally aligned, mapcount is 1. Splitting the > PMD into PTEs would not change the mapcount; the folio remains order-9 > but it stll has a reference from only one page table (a different page > table, but still just one). > > Implementation sketch > --------------------- > > When we take a page fault, we can/should map every page in the folio > that fits in this VMA and this page table. We do this at present in > filemap_map_pages() by looping over each page in the folio and calling > do_set_pte() on each. We should have a: > > do_set_pte_range(vmf, folio, addr, first_page, n); > > and then change the API to page_add_new_anon_rmap() / page_add_file_rmap() > to pass in (folio, first, n) instead of page. That gives us one call to > page_add_*_rmap() per (vma, page table) tuple. > > In try_to_unmap_one(), page_vma_mapped_walk() currently calls us for > each pfn. We'll want a function like > page_vma_mapped_walk_skip_to_end_of_ptable() > in order to persuade it to only call us once or twice if the folio > is mapped across a page table boundary. > > Concerns > -------- > > We'll have to be careful to always zap all the PTEs for a given (vma, > pt) tuple at the same time, otherwise mapcount will get out of sync > (eg map three pages, unmap two; we shouldn't decrement the mapcount, > but I don't think we can know that. But does this ever happen? I think > we always unmap the entire folio, like in try_to_unmap_one(). > > I haven't got my head around SetPageAnonExclusive() yet. I think it can > be a per-folio bit, but handling a folio split across two page tables > may be tricky. > > Notes > ----- > > [1] Ignoring the bias by -1 to let us detect transitions that we care > about more efficiently; I'm talking about the value returned from > page_mapcount(), not the value stored in page->_mapcount. -- Best Regards, Yan, Zi --=_MailMate_136FC8BA-5501-48B8-BF0D-A2B4C868590A_= Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc -----BEGIN PGP SIGNATURE----- iQJDBAEBCgAtFiEE6rR4j8RuQ2XmaZol4n+egRQHKFQFAmPiewMPHHppeUBudmlk aWEuY29tAAoJEOJ/noEUByhU/b0P/j24fznbJVNtDyvx2UdnlKLyOU2lj7queOS6 13EAXjF+/hfjhKm5nEqI7wN/F0AParfp417qormOQpeQ+1RCjwM51I9/UyNjfoYk jSqGh4/xIBlPNoPSrpj+RY6obPdK8MGm9tfmOaOnudFZm2H2sBckSpfhy/l7tGCC MJtfxNIPEjS8JxPhab8CAwZvYe6nINo19lsWm/7sNtj0/9pRFlTT4WPbyfNMKz8G AolyOXaHjQ82r5J5laPUwxz31ZWecAvjjlmSwW/Qa97cq3RjzMMb4NE3aimSP5T4 3uUnyl7FpQ+4fFr9/XESCIBnBFsBN0qoRujSYBx5y88ZUCmGTvH2vW2YXSUBX6Ty DwXYZCdRAiqm56dqkQ9ALx/zOQKiE33gib6Nad8b8JDz3CeN4NfpmUDDoqDAAvRx kXEj7JRYdGgXQ7mPbLeik96NGe14/sRqdRCBhE5cnujTitlawL3X6HPk1mcCdvMp ev4Vdl7QF2BMJZp9d+Iq4HOnLopWEoTSHVsDOuLa/kotuDL235EZ98PVRYg85Sjn Lgsw7DeINQq3VXCMxp3KSGcKdV5B5Dmavab96nMwMJSsAUlky0cHHNwggtIVFUCJ Y9O73ttL/7Vns1COtZ7Et1KSu/anILx0h4sIzPSwtO4uP8RVp2tOpPkq0f0HD1De IKOLMIGV =esXC -----END PGP SIGNATURE----- --=_MailMate_136FC8BA-5501-48B8-BF0D-A2B4C868590A_=--