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 90083C4332F for ; Thu, 8 Dec 2022 14:07:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 989798E0003; Thu, 8 Dec 2022 09:07:17 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 912EA8E0001; Thu, 8 Dec 2022 09:07:17 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 78BB18E0003; Thu, 8 Dec 2022 09:07:17 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 657C78E0001 for ; Thu, 8 Dec 2022 09:07:17 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 322B8140F3D for ; Thu, 8 Dec 2022 14:07:17 +0000 (UTC) X-FDA: 80219316114.21.ACF90E2 Received: from mx6.didiglobal.com (mx6.didiglobal.com [111.202.70.123]) by imf03.hostedemail.com (Postfix) with SMTP id E2BD62002C for ; Thu, 8 Dec 2022 14:07:12 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf03.hostedemail.com: domain of chengkaitao@didiglobal.com designates 111.202.70.123 as permitted sender) smtp.mailfrom=chengkaitao@didiglobal.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1670508433; 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:content-transfer-encoding: in-reply-to:in-reply-to:references; bh=BxDVabd2vGjTDsqgiPTdt2RefTtYZ+thCFZD7OSLRG8=; b=lcoFjQxDAj0sBEK/Hze4QGVy70n53al9jka/LHaEAkV3Xi/YMOiPvn//+ivCkEW9rrunbl Y4KUTlsYj7i3Lr53BmM0MDrFO6iP78JS8aiz1qg7lzv8YmHccP3mbOw5aHwHPfkMrxax1H HhO9m0cDtduyJ/BYxhM287gx+P13tXY= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf03.hostedemail.com: domain of chengkaitao@didiglobal.com designates 111.202.70.123 as permitted sender) smtp.mailfrom=chengkaitao@didiglobal.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1670508433; a=rsa-sha256; cv=none; b=mNzYpjKx0CIHNpKXKnIXj5NV8Uc4yOS9k2YWjSFKLN2hU9lPEd6I4cbd2+IaeJ2hzGg2kV noUQCfU+Cv2UwguKMkTG2+dVCljfEeWi92jFYtmxoJnYENUC8kYSHlJEOecgOpXMKJBfDv BEBIIPFOD+Liu3ZiJXA0WL476XHLn68= Received: from mail.didiglobal.com (unknown [10.79.65.18]) by mx6.didiglobal.com (Maildata Gateway V2.8) with ESMTPS id 0F88711053B802; Thu, 8 Dec 2022 22:07:06 +0800 (CST) Received: from ZJY03-ACTMBX-05.didichuxing.com (10.79.71.35) by ZJY02-ACTMBX-06.didichuxing.com (10.79.65.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.17; Thu, 8 Dec 2022 22:07:06 +0800 Received: from ZJY03-ACTMBX-05.didichuxing.com ([fe80::1dcd:f7bf:746e:c769]) by ZJY03-ACTMBX-05.didichuxing.com ([fe80::1dcd:f7bf:746e:c769%8]) with mapi id 15.01.2375.017; Thu, 8 Dec 2022 22:07:06 +0800 X-MD-Sfrom: chengkaitao@didiglobal.com X-MD-SrcIP: 10.79.65.18 From: =?utf-8?B?56iL5Z6y5rabIENoZW5na2FpdGFvIENoZW5n?= To: Michal Hocko CC: chengkaitao , "tj@kernel.org" , "lizefan.x@bytedance.com" , "hannes@cmpxchg.org" , "corbet@lwn.net" , "roman.gushchin@linux.dev" , "shakeelb@google.com" , "akpm@linux-foundation.org" , "songmuchun@bytedance.com" , "viro@zeniv.linux.org.uk" , "zhengqi.arch@bytedance.com" , "ebiederm@xmission.com" , "Liam.Howlett@oracle.com" , "chengzhihao1@huawei.com" , "haolee.swjtu@gmail.com" , "yuzhao@google.com" , "willy@infradead.org" , "vasily.averin@linux.dev" , "vbabka@suse.cz" , "surenb@google.com" , "sfr@canb.auug.org.au" , "mcgrof@kernel.org" , "sujiaxun@uniontech.com" , "feng.tang@intel.com" , "cgroups@vger.kernel.org" , "linux-doc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-fsdevel@vger.kernel.org" , "linux-mm@kvack.org" Subject: Re: [PATCH v2] mm: memcontrol: protect the memory in cgroup from being oom killed Thread-Topic: [PATCH v2] mm: memcontrol: protect the memory in cgroup from being oom killed Thread-Index: AQHZCrfAdhr5zYTMtke9YS08C4BFfq5jExWAgACNdAD//34EAIAA6LeA Date: Thu, 8 Dec 2022 14:07:06 +0000 Message-ID: <3E260DAC-2E2F-48B7-98BB-036EF0A423DC@didiglobal.com> In-Reply-To: Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.79.65.102] Content-Type: text/plain; charset="utf-8" Content-ID: <4E155EE2AF03EF418EE4F2728C2F93A6@didichuxing.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: E2BD62002C X-Stat-Signature: 3db95x6eym39j7qqitxo9hpsyxzu1q7n X-HE-Tag: 1670508432-922273 X-HE-Meta: U2FsdGVkX1+fAaP6mYcwmLw983eiTPclRlX2LJClN9vH5WKYuNnUrvAki8uzYoH8CdmVGONViNQVPjxqWM8bzU6vKAVlM5UkTl6iP1Fj3Qym5N/b4BWry+6vN+kZpcN5PxW3yHqBAyijmoc/+Th7XX6lF8y9scWIp+Jzon/F148kobd/c/AnO5cM5swAgSgI67LvZZlel9lIOAHo3jFJBq/um2sVGS7i1+vWkEFEFEcA1C9Vo1yCBrXUgV/PKqL+C1sBul71kFrwKlyPylZWhexrAkK+3DJZThPSy7dYZX3yeg9QQhD9+/1fFmTDPGT5xHIpVJo+8NqRzUW2rjVcZo2oK9K7Ca7IDP62JRhPKL+zkoDUpvf5boeYc8QI31HQwdX8r+CAIDA3Qr4GvYEWr8fPVOR5Q9mdgkOwMopFBZJrSXDJNfKGGbnwAnA4FGTzk5wfxXgTHRMoaR/0GCGMCgemZQ5WxXoGByaoPVFwEphrVB8qZnozMcSF+Lu1zytGVhj8ynRv9e0AMrkwFFhsfiBF6A3RfzGv1ar0wOHE2o0zQ8HSOZJhm2nIH4hn3+yYLuiLC/3fhNneL7HVzQGmHPKwMFke7wgKE4Os+ByktScR7d33tW8vKqpC3UmeZZoWniIDR4n+d6OZ5D6lceT1U7ilu4zru3PmFcb8kUtSd3V9w5hyRsCbM7NfiOxMQHCbXJIH53MrKNLmFOqkRRS//tXkNeu0UgB96+RF693hWnhYTpSxpBEHlP6K47EtK6ssXCLzDloCyWnFbi3CSHhhtrUtvovXQ410Xk74HTOQw10vdx1lkRTS+Bbn4oC9SGf6NkuStFMRyOtILZtBN+mpK4NqAkNo4ZgeGiMCFfhLtKpqg43nAWr33Z796jvAMQG8OzLzVnoQcsZtbJ8OHP6uRGaARWe6ni/GbI8BGD7E0DOcOGdDhOQw9eIeUZ1Rc9sp 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: QXQgMjAyMi0xMi0wOCAxNjoxNDoxMCwgIk1pY2hhbCBIb2NrbyIgPG1ob2Nrb0BzdXNlLmNvbT4g d3JvdGU6DQo+T24gVGh1IDA4LTEyLTIyIDA3OjU5OjI3LCDnqIvlnrLmtpsgQ2hlbmdrYWl0YW8g Q2hlbmcgd3JvdGU6DQo+PiBBdCAyMDIyLTEyLTA4IDE1OjMzOjA3LCAiTWljaGFsIEhvY2tvIiA8 bWhvY2tvQHN1c2UuY29tPiB3cm90ZToNCj4+ID5PbiBUaHUgMDgtMTItMjIgMTE6NDY6NDQsIGNo ZW5na2FpdGFvIHdyb3RlOg0KPj4gPj4gRnJvbTogY2hlbmdrYWl0YW8gPHBpbGdyaW10YW9AZ21h aWwuY29tPg0KPj4gPj4gDQo+PiA+PiBXZSBjcmVhdGVkIGEgbmV3IGludGVyZmFjZSA8bWVtb3J5 Lm9vbS5wcm90ZWN0PiBmb3IgbWVtb3J5LCBJZiB0aGVyZSBpcw0KPj4gPj4gdGhlIE9PTSBraWxs ZXIgdW5kZXIgcGFyZW50IG1lbW9yeSBjZ3JvdXAsIGFuZCB0aGUgbWVtb3J5IHVzYWdlIG9mIGEN Cj4+ID4+IGNoaWxkIGNncm91cCBpcyB3aXRoaW4gaXRzIGVmZmVjdGl2ZSBvb20ucHJvdGVjdCBi b3VuZGFyeSwgdGhlIGNncm91cCdzDQo+PiA+PiB0YXNrcyB3b24ndCBiZSBPT00ga2lsbGVkIHVu bGVzcyB0aGVyZSBpcyBubyB1bnByb3RlY3RlZCB0YXNrcyBpbiBvdGhlcg0KPj4gPj4gY2hpbGRy ZW4gY2dyb3Vwcy4gSXQgZHJhd3Mgb24gdGhlIGxvZ2ljIG9mIDxtZW1vcnkubWluL2xvdz4gaW4g dGhlDQo+PiA+PiBpbmhlcml0YW5jZSByZWxhdGlvbnNoaXAuDQo+PiA+PiANCj4+ID4+IEl0IGhh cyB0aGUgZm9sbG93aW5nIGFkdmFudGFnZXMsDQo+PiA+PiAxLiBXZSBoYXZlIHRoZSBhYmlsaXR5 IHRvIHByb3RlY3QgbW9yZSBpbXBvcnRhbnQgcHJvY2Vzc2VzLCB3aGVuIHRoZXJlDQo+PiA+PiBp cyBhIG1lbWNnJ3MgT09NIGtpbGxlci4gVGhlIG9vbS5wcm90ZWN0IG9ubHkgdGFrZXMgZWZmZWN0 IGxvY2FsIG1lbWNnLA0KPj4gPj4gYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgT09NIGtpbGxlciBv ZiB0aGUgaG9zdC4NCj4+ID4+IDIuIEhpc3RvcmljYWxseSwgd2UgY2FuIG9mdGVuIHVzZSBvb21f c2NvcmVfYWRqIHRvIGNvbnRyb2wgYSBncm91cCBvZg0KPj4gPj4gcHJvY2Vzc2VzLCBJdCByZXF1 aXJlcyB0aGF0IGFsbCBwcm9jZXNzZXMgaW4gdGhlIGNncm91cCBtdXN0IGhhdmUgYQ0KPj4gPj4g Y29tbW9uIHBhcmVudCBwcm9jZXNzZXMsIHdlIGhhdmUgdG8gc2V0IHRoZSBjb21tb24gcGFyZW50 IHByb2Nlc3Mncw0KPj4gPj4gb29tX3Njb3JlX2FkaiwgYmVmb3JlIGl0IGZvcmtzIGFsbCBjaGls ZHJlbiBwcm9jZXNzZXMuIFNvIHRoYXQgaXQgaXMNCj4+ID4+IHZlcnkgZGlmZmljdWx0IHRvIGFw cGx5IGl0IGluIG90aGVyIHNpdHVhdGlvbnMuIE5vdyBvb20ucHJvdGVjdCBoYXMgbm8NCj4+ID4+ IHN1Y2ggcmVzdHJpY3Rpb25zLCB3ZSBjYW4gcHJvdGVjdCBhIGNncm91cCBvZiBwcm9jZXNzZXMg bW9yZSBlYXNpbHkuIFRoZQ0KPj4gPj4gY2dyb3VwIGNhbiBrZWVwIHNvbWUgbWVtb3J5LCBldmVu IGlmIHRoZSBPT00ga2lsbGVyIGhhcyB0byBiZSBjYWxsZWQuDQo+PiA+PiANCj4+ID4+IFNpZ25l ZC1vZmYtYnk6IGNoZW5na2FpdGFvIDxwaWxncmltdGFvQGdtYWlsLmNvbT4NCj4+ID4+IC0tLQ0K Pj4gPj4gdjI6IE1vZGlmeSB0aGUgZm9ybXVsYSBvZiB0aGUgcHJvY2VzcyByZXF1ZXN0IG1lbWNn IHByb3RlY3Rpb24gcXVvdGEuDQo+PiA+DQo+PiA+VGhlIG5ldyBmb3JtdWxhIGRvZXNuJ3QgcmVh bGx5IGFkZHJlc3MgY29uY2VybnMgZXhwcmVzc2VkIHByZXZpb3VzbHkuDQo+PiA+UGxlYXNlIHJl YWQgbXkgZmVlZGJhY2sgY2FyZWZ1bGx5IGFnYWluIGFuZCBmb2xsb3cgdXAgd2l0aCBxdWVzdGlv bnMgaWYNCj4+ID5zb21ldGhpbmcgaXMgbm90IGNsZWFyLg0KPj4gDQo+PiBUaGUgcHJldmlvdXMg ZGlzY3Vzc2lvbiB3YXMgcXVpdGUgc2NhdHRlcmVkLiBDYW4geW91IGhlbHAgbWUgc3VtbWFyaXpl DQo+PiB5b3VyIGNvbmNlcm5zIGFnYWluPw0KPg0KPlRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IGlz IGh0dHA6Ly9sa21sLmtlcm5lbC5vcmcvci9ZNGpGblk3a01kQjhSZVNXQGRoY3AyMi5zdXNlLmN6 DQo+OiBMZXQgbWUganVzdCBlbXBoYXNpc2UgdGhhdCB3ZSBhcmUgdGFsa2luZyBhYm91dCBmdW5k YW1lbnRhbCBkaXNjb25uZWN0Lg0KPjogUnNzIGJhc2VkIGFjY291bnRpbmcgaGFzIGJlZW4gdXNl ZCBmb3IgdGhlIE9PTSBraWxsZXIgc2VsZWN0aW9uIGJlY2F1c2UNCj46IHRoZSBtZW1vcnkgZ2V0 cyB1bm1hcHBlZCBhbmQgX3BvdGVudGlhbGx5XyBmcmVlZCB3aGVuIHRoZSBwcm9jZXNzIGdvZXMN Cj46IGF3YXkuIE1lbWNnIGNoYW5nZXMgYXJlIGJvdW5kIHRvIHRoZSBvYmplY3QgbGlmZSB0aW1l IGFuZCBhcyBzYWlkIGluDQo+OiBtYW55IGNhc2VzIHRoZXJlIGlzIG5vIGRpcmVjdCByZWxhdGlv biB3aXRoIGFueSBwcm9jZXNzIGxpZmUgdGltZS4NCj4NCldlIG5lZWQgdG8gZGlzY3VzcyB0aGUg cmVsYXRpb25zaGlwIGJldHdlZW4gbWVtY2cncyBtZW0gYW5kIHByb2Nlc3MncyBtZW0sIA0KDQp0 YXNrX3VzYWdlID0gdGFza19hbm9uKHJzc19hbm9uKSArIHRhc2tfbWFwcGVkX2ZpbGUocnNzX2Zp bGUpIA0KCSArIHRhc2tfbWFwcGVkX3NoYXJlKHJzc19zaGFyZSkgKyB0YXNrX3BndGFibGVzICsg dGFza19zd2FwZW50cw0KDQptZW1jZ191c2FnZQk9IG1lbWNnX2Fub24gKyBtZW1jZ19maWxlICsg bWVtY2dfcGd0YWJsZXMgKyBtZW1jZ19zaGFyZQ0KCT0gYWxsX3Rhc2tfYW5vbiArIGFsbF90YXNr X21hcHBlZF9maWxlICsgYWxsX3Rhc2tfbWFwcGVkX3NoYXJlIA0KCSArIGFsbF90YXNrX3BndGFi bGVzICsgdW5tYXBwZWRfZmlsZSArIHVubWFwcGVkX3NoYXJlDQoJPSBhbGxfdGFza191c2FnZSAr IHVubWFwcGVkX2ZpbGUgKyB1bm1hcHBlZF9zaGFyZSAtIGFsbF90YXNrX3N3YXBlbnRzDQoNCk1l bWNnIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gcHJvY2Vzc2VzIGZvciBtb3N0IG1lbW9yeS4gT24g dGhlIG90aGVyIGhhbmQsIA0KdW5tYXBwZWRfZmlsZSBwYWdlcyBhbmQgdW5tYXBwZWRfc2hhcmUg cGFnZXMgYXJlbid0IGNoYXJnZWQgaW50byB0aGUgDQpwcm9jZXNzLCBidXQgdGhlc2UgbWVtb3Jp ZXMgY2FuIG5vdCBiZSByZWxlYXNlZCBieSB0aGUgb29tIGtpbGxlci4gVGhlcmVmb3JlLCANCnRo ZXkgc2hvdWxkIG5vdCBhcHBseSB0byBjZ3JvdXAgZm9yIHByb3RlY3Rpb24gcXVvdGEuIFRoZXkg Y2FuIGJlIGV4Y2x1ZGVkIA0KZHVyaW5nIGNhbGN1bGF0aW9uLg0KDQogICAgICAgbWVtY2cgQQ0K ICAgIC8gICAgIHwgICAgIFwNCnRhc2steCAgdGFzay15ICBjb21tb24tY2FjaGUNCiAgIDJHICAg ICAyRyAgICAgICAgMkcNCg0KZW9vbS5wcm90ZWN0KG1lbWNnIEEpID0gM0c7DQp1c2FnZShtZW1j ZyBBKSA9IDZHDQp1c2FnZSh0YXNrIHgpID0gMkcNCnVzYWdlKHRhc2sgeSkgPSAyRw0KY29tbW9u LWNhY2hlID0gMkcNCg0KQWZ0ZXIgY2FsY3VsYXRpb24sDQphY3R1YWwtcHJvdGVjdGlvbih0YXNr IHgpID0gMUcNCmFjdHVhbC1wcm90ZWN0aW9uKHRhc2sgeSkgPSAxRw0KDQpUaGlzIGZvcm11bGEg aXMgbW9yZSBmYWlyIGZvciBncm91cHMgd2l0aCBmZXdlciBjb21tb24tY2FjaGVzICh1bm1hcHBl ZF8NCmZpbGUgcGFnZXMgYW5kIHVubWFwcGVkX3NoYXJlIHBhZ2VzKS4NCkluIGV4dHJlbWUgZW52 aXJvbm1lbnRzLCB1bm1hcHBlZF9maWxlIHBhZ2VzIGFuZCB1bm1hcHBlZF9zaGFyZSBwYWdlcyAN Cm1heSBsb2NrIGEgbGFyZ2Ugc2hhcmUgb2YgcHJvdGVjdGlvbiBxdW90YSwgYnV0IGl0IGlzIGV4 cGVjdGVkLg0KDQo+VGhhdCBpcyB0byB0aGUgcGVyLXByb2Nlc3MgZGlzY291bnQgYmFzZWQgb24g cnNzIG9yIGFueSBwZXItcHJvY2Vzcw0KPm1lbW9yeSBtZXRyaWNzLg0KPg0KPkFub3RoZXIgcmVh bGx5IGltcG9ydGFudCBxdWVzdGlvbiBpcyB0aGUgYWN0dWFsIGNvbmZpZ3VyYWJpbGl0eS4gVGhl DQo+aGllcmFyY2hpY2FsIHByb3RlY3Rpb24gaGFzIHRvIGJlIGVuZm9yY2VkIGFuZCB0aGF0IG1l YW5zIHRoYXQgc2FtZSBhcw0KPm1lbW9yeSByZWNsYWltIHByb3RlY3Rpb24gaXQgaGFzIHRvIGJl IGVuZm9yY2VkIHRvcC10by1ib3R0b20gaW4gdGhlDQo+Y2dyb3VwIGhpZXJhcmNoeS4gVGhhdCBt YWtlcyB0aGUgb29tIHByb3RlY3Rpb24gcmF0aGVyIG5vbi10cml2aWFsIHRvDQo+Y29uZmlndXJl IHdpdGhvdXQgaGF2aW5nIGEgZ29vZCBwaWN0dXJlIG9mIGEgbGFyZ2VyIHBhcnQgb2YgdGhlIGNn cm91cA0KPmhpZXJhcmNoeSBhcyBpdCBjYW5ub3QgYmUgdHVuZWQgYmFzZWQgb24gYSByZWNsYWlt IGZlZWRiYWNrLg0KDQpUaGVyZSBpcyBhbiBlc3NlbnRpYWwgZGlmZmVyZW5jZSBiZXR3ZWVuIHJl Y2xhaW0gYW5kIG9vbSBraWxsZXIuIFRoZSByZWNsYWltIA0KY2Fubm90IGJlIGRpcmVjdGx5IHBl cmNlaXZlZCBieSB1c2Vycywgc28gbWVtY2cgbmVlZCB0byBjb3VudCBpbmRpY2F0b3JzIA0Kc2lt aWxhciB0byBwZ3NjYW5fKGtzd2FwZC9kaXJlY3QpLiBIb3dldmVyLCB3aGVuIHRoZSB1c2VyIHBy b2Nlc3MgaXMga2lsbGVkIA0KYnkgb29tIGtpbGxlciwgdXNlcnMgY2FuIGNsZWFybHkgcGVyY2Vp dmUgYW5kIGNvdW50IChzdWNoIGFzIHRoZSBudW1iZXIgb2YgDQpyZXN0YXJ0cyBvZiBhIGNlcnRh aW4gdHlwZSBvZiBwcm9jZXNzKS4gQXQgdGhlIHNhbWUgdGltZSwgdGhlIGtlcm5lbCBhbHNvIGhh cyANCm1lbW9yeS5ldmVudHMgdG8gY291bnQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb29t IGtpbGxlciwgd2hpY2ggY2FuIA0KYWxzbyBiZSB1c2VkIGZvciBmZWVkYmFjayBhZGp1c3RtZW50 LiBPZiBjb3Vyc2UsIEkgY2FuIGFsc28gYWRkIHNvbWUgDQppbmRpY2F0b3JzIHNpbWlsYXIgdG8g dGhlIGFjY3VtdWxhdGVkIG1lbW9yeSByZWxlYXNlZCBieSB0aGUgb29tIGtpbGxlciANCnRvIGhl bHAgdXNlcnMgYmV0dGVyIGdyYXNwIHRoZSBkeW5hbWljcyBvZiB0aGUgb29tIGtpbGxlci4gRG8g eW91IHRoaW5rIGl0IA0KaXMgdmFsdWFibGU/DQotLSANClRoYW5rcyBmb3IgeW91ciBjb21tZW50 IQ0KY2hlbmdrYWl0YW8NCg0K