From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 444AFA04C2; Thu, 14 Nov 2019 11:58:24 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E8B042BC8; Thu, 14 Nov 2019 11:58:23 +0100 (CET) Received: from smtp3.jd.com (smtp3.jd.com [59.151.64.88]) by dpdk.org (Postfix) with ESMTP id 538F42AB; Thu, 14 Nov 2019 11:58:22 +0100 (CET) Received: from BJMAILD1MBX94.360buyAD.local (172.31.0.94) by BJMAILD1MBX48.360buyAD.local (172.31.0.48) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1415.2; Thu, 14 Nov 2019 18:58:19 +0800 Received: from BJMAILD1MBX96.360buyAD.local (172.31.0.96) by BJMAILD1MBX94.360buyAD.local (172.31.0.94) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1415.2; Thu, 14 Nov 2019 18:58:18 +0800 Received: from BJMAILD1MBX96.360buyAD.local ([fe80::682e:8606:86ff:384c]) by BJMAILD1MBX96.360buyAD.local ([fe80::682e:8606:86ff:384c%25]) with mapi id 15.01.1415.002; Thu, 14 Nov 2019 18:58:18 +0800 From: =?utf-8?B?546L5b+X5YWL?= To: Maxime Coquelin , Zhike Wang , "dev@dpdk.org" , "stable@dpdk.org" , "security@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH v2] vhost: fix vring message handling broken in some case Thread-Index: AQHVmoCrqaMsAlZyVUydHgERwbDaVqeJ1pQAgACdKuD//3xhAIAAjeMA Date: Thu, 14 Nov 2019 10:58:18 +0000 Message-ID: <629a72b81a3b41a99a415ef8ed51b43a@jd.com> References: <1573643008-8216-1-git-send-email-wangzk320@163.com> <36d4ff71-bce4-6b69-7110-c4f6b9bfa51d@redhat.com> <98c33d29d2954f268fd7dd6ed03e6b3f@jd.com> <2aa9d9f5-2cf3-580c-f1ab-e1a12a33583e@redhat.com> In-Reply-To: <2aa9d9f5-2cf3-580c-f1ab-e1a12a33583e@redhat.com> Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.31.14.18] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2] vhost: fix vring message handling broken in some case X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgTWF4aW1lLA0KDQpVc3VhbGx5IEkgZGVmaW5lIHNvbWUgeG1sIGZpbGUsIGFuZCB1c2Ugdmly c2ggdG8gc3RhcnQgdGhlIFZNLiBCZWxvdyBpcyBnb3QgZnJvbSBwcyBjb21tYW5kLg0KDQovdXNy L2xpYmV4ZWMvcWVtdS1rdm0gLW5hbWUgZ3Vlc3Q9dGVzdF92aXJ0aW8sZGVidWctdGhyZWFkcz1v biAtUyAtb2JqZWN0IHNlY3JldCxpZD1tYXN0ZXJLZXkwLGZvcm1hdD1yYXcsZmlsZT0vdmFyL2xp Yi9saWJ2aXJ0L3FlbXUvZG9tYWluLTQtdGVzdF92aXJ0aW8vbWFzdGVyLWtleS5hZXMgLW1hY2hp bmUgcGMtaTQ0MGZ4LXJoZWw3LjAuMCxhY2NlbD1rdm0sdXNiPW9mZixkdW1wLWd1ZXN0LWNvcmU9 b2ZmIC1jcHUgaG9zdCAtbSA4MTkyIC1yZWFsdGltZSBtbG9jaz1vZmYgLXNtcCA5LHNvY2tldHM9 MSxjb3Jlcz05LHRocmVhZHM9MSAtb2JqZWN0IG1lbW9yeS1iYWNrZW5kLWZpbGUsaWQ9cmFtLW5v ZGUwLHByZWFsbG9jPXllcyxtZW0tcGF0aD0vbW50L2h1Z2VfMUdCL2xpYnZpcnQvcWVtdS80LXRl c3RfdmlydGlvLHNoYXJlPXllcyxzaXplPTg1ODk5MzQ1OTIsaG9zdC1ub2Rlcz0wLHBvbGljeT1w cmVmZXJyZWQgLW51bWEgbm9kZSxub2RlaWQ9MCxjcHVzPTAsbWVtZGV2PXJhbS1ub2RlMCAtdXVp ZCAzMTFhOWRhNC0wZjAyLTRlOWEtYjU1OC03YjIxMjM3OTQ2MzkgLWRpc3BsYXkgbm9uZSAtbm8t dXNlci1jb25maWcgLW5vZGVmYXVsdHMgLWNoYXJkZXYgc29ja2V0LGlkPWNoYXJtb25pdG9yLHBh dGg9L3Zhci9saWIvbGlidmlydC9xZW11L2RvbWFpbi00LXRlc3RfdmlydGlvL21vbml0b3Iuc29j ayxzZXJ2ZXIsbm93YWl0IC1tb24gY2hhcmRldj1jaGFybW9uaXRvcixpZD1tb25pdG9yLG1vZGU9 Y29udHJvbCAtcnRjIGJhc2U9dXRjLGRyaWZ0Zml4PXNsZXcgLWdsb2JhbCBrdm0tcGl0Lmxvc3Rf dGlja19wb2xpY3k9ZGVsYXkgLW5vLWhwZXQgLW5vLXJlYm9vdCAtZ2xvYmFsIFBJSVg0X1BNLmRp c2FibGVfczM9MSAtZ2xvYmFsIFBJSVg0X1BNLmRpc2FibGVfczQ9MSAtYm9vdCBzdHJpY3Q9b24g LWRldmljZSBpY2g5LXVzYi1laGNpMSxpZD11c2IsYnVzPXBjaS4wLGFkZHI9MHg0LjB4NyAtZGV2 aWNlIGljaDktdXNiLXVoY2kxLG1hc3RlcmJ1cz11c2IuMCxmaXJzdHBvcnQ9MCxidXM9cGNpLjAs bXVsdGlmdW5jdGlvbj1vbixhZGRyPTB4NCAtZGV2aWNlIGljaDktdXNiLXVoY2kyLG1hc3RlcmJ1 cz11c2IuMCxmaXJzdHBvcnQ9MixidXM9cGNpLjAsYWRkcj0weDQuMHgxIC1kZXZpY2UgaWNoOS11 c2ItdWhjaTMsbWFzdGVyYnVzPXVzYi4wLGZpcnN0cG9ydD00LGJ1cz1wY2kuMCxhZGRyPTB4NC4w eDIgLWRldmljZSB2aXJ0aW8tc2VyaWFsLXBjaSxpZD12aXJ0aW8tc2VyaWFsMCxidXM9cGNpLjAs YWRkcj0weDUgLWRyaXZlIGZpbGU9L2V4cG9ydC93YW5nemhpa2UvaW1hZ2UvY2VudG9zNzQucWNv dzIsZm9ybWF0PXFjb3cyLGlmPW5vbmUsaWQ9ZHJpdmUtdmlydGlvLWRpc2swIC1kZXZpY2Ugdmly dGlvLWJsay1wY2ksc2NzaT1vZmYsYnVzPXBjaS4wLGFkZHI9MHg2LGRyaXZlPWRyaXZlLXZpcnRp by1kaXNrMCxpZD12aXJ0aW8tZGlzazAsYm9vdGluZGV4PTIgLW5ldGRldiB0YXAsZmQ9MjYsaWQ9 aG9zdG5ldDAsdmhvc3Q9b24sdmhvc3RmZD0yOCAtZGV2aWNlIHZpcnRpby1uZXQtcGNpLG5ldGRl dj1ob3N0bmV0MCxpZD1uZXQwLG1hYz01Mjo1NDowMDo5MjpkYjo4YyxidXM9cGNpLjAsYWRkcj0w eDggLWNoYXJkZXYgc29ja2V0LGlkPWNoYXJuZXQxLHBhdGg9L3Zhci9saWIvb3BlbnZzd2l0Y2gv cG9ydC12aG9zdDAsc2VydmVyIC1uZXRkZXYgdmhvc3QtdXNlcixjaGFyZGV2PWNoYXJuZXQxLHF1 ZXVlcz00LGlkPWhvc3RuZXQxIC1kZXZpY2UgdmlydGlvLW5ldC1wY2ksbXJnX3J4YnVmPW9uLG1x PW9uLHZlY3RvcnM9MTAscnhfcXVldWVfc2l6ZT0xMDI0LG5ldGRldj1ob3N0bmV0MSxpZD1uZXQx LG1hYz1lNDoyMjoyMjozMzo0NDowMSxidXM9cGNpLjAsbXVsdGlmdW5jdGlvbj1vbixhZGRyPTB4 OSAtY2hhcmRldiBzb2NrZXQsaWQ9Y2hhcm5ldDIscGF0aD0vdmFyL2xpYi9vcGVudnN3aXRjaC9w b3J0LXZob3N0MSxzZXJ2ZXIgLW5ldGRldiB2aG9zdC11c2VyLGNoYXJkZXY9Y2hhcm5ldDIscXVl dWVzPTQsaWQ9aG9zdG5ldDIgLWRldmljZSB2aXJ0aW8tbmV0LXBjaSxtcmdfcnhidWY9b24sbXE9 b24sdmVjdG9ycz0xMCxyeF9xdWV1ZV9zaXplPTEwMjQsbmV0ZGV2PWhvc3RuZXQyLGlkPW5ldDIs bWFjPWU0OjIyOjIyOjMzOjQ0OjAyLGJ1cz1wY2kuMCxhZGRyPTB4OS4weDEgLWNoYXJkZXYgc29j a2V0LGlkPWNoYXJuZXQzLHBhdGg9L3Zhci9saWIvb3BlbnZzd2l0Y2gvcG9ydC12aG9zdDIsc2Vy dmVyIC1uZXRkZXYgdmhvc3QtdXNlcixjaGFyZGV2PWNoYXJuZXQzLHF1ZXVlcz00LGlkPWhvc3Ru ZXQzIC1kZXZpY2UgdmlydGlvLW5ldC1wY2ksbXJnX3J4YnVmPW9uLG1xPW9uLHZlY3RvcnM9MTAs cnhfcXVldWVfc2l6ZT0xMDI0LG5ldGRldj1ob3N0bmV0MyxpZD1uZXQzLG1hYz1lNDoyMjoyMjoz Mzo0NDowMyxidXM9cGNpLjAsYWRkcj0weDkuMHgyIC1jaGFyZGV2IHNvY2tldCxpZD1jaGFybmV0 NCxwYXRoPS92YXIvbGliL29wZW52c3dpdGNoL3BvcnQtdmhvc3QzLHNlcnZlciAtbmV0ZGV2IHZo b3N0LXVzZXIsY2hhcmRldj1jaGFybmV0NCxxdWV1ZXM9NCxpZD1ob3N0bmV0NCAtZGV2aWNlIHZp cnRpby1uZXQtcGNpLG1yZ19yeGJ1Zj1vbixtcT1vbix2ZWN0b3JzPTEwLHJ4X3F1ZXVlX3NpemU9 MTAyNCxuZXRkZXY9aG9zdG5ldDQsaWQ9bmV0NCxtYWM9ZTQ6MjI6MjI6MzM6NDQ6MDQsYnVzPXBj aS4wLGFkZHI9MHg5LjB4MyAtY2hhcmRldiBzb2NrZXQsaWQ9Y2hhcm5ldDUscGF0aD0vdmFyL2xp Yi9vcGVudnN3aXRjaC9wb3J0LXZob3N0NCxzZXJ2ZXIgLW5ldGRldiB2aG9zdC11c2VyLGNoYXJk ZXY9Y2hhcm5ldDUscXVldWVzPTQsaWQ9aG9zdG5ldDUgLWRldmljZSB2aXJ0aW8tbmV0LXBjaSxt cmdfcnhidWY9b24sbXE9b24sdmVjdG9ycz0xMCxyeF9xdWV1ZV9zaXplPTEwMjQsbmV0ZGV2PWhv c3RuZXQ1LGlkPW5ldDUsbWFjPWU0OjIyOjIyOjMzOjQ0OjA1LGJ1cz1wY2kuMCxhZGRyPTB4OS4w eDQgLWNoYXJkZXYgc29ja2V0LGlkPWNoYXJuZXQ2LHBhdGg9L3Zhci9saWIvb3BlbnZzd2l0Y2gv cG9ydC12aG9zdDUsc2VydmVyIC1uZXRkZXYgdmhvc3QtdXNlcixjaGFyZGV2PWNoYXJuZXQ2LHF1 ZXVlcz00LGlkPWhvc3RuZXQ2IC1kZXZpY2UgdmlydGlvLW5ldC1wY2ksbXJnX3J4YnVmPW9uLG1x PW9uLHZlY3RvcnM9MTAscnhfcXVldWVfc2l6ZT0xMDI0LG5ldGRldj1ob3N0bmV0NixpZD1uZXQ2 LG1hYz1lNDoyMjoyMjozMzo0NDowNixidXM9cGNpLjAsYWRkcj0weDkuMHg1IC1jaGFyZGV2IHNv Y2tldCxpZD1jaGFybmV0NyxwYXRoPS92YXIvbGliL29wZW52c3dpdGNoL3BvcnQtdmhvc3Q2LHNl cnZlciAtbmV0ZGV2IHZob3N0LXVzZXIsY2hhcmRldj1jaGFybmV0NyxxdWV1ZXM9NCxpZD1ob3N0 bmV0NyAtZGV2aWNlIHZpcnRpby1uZXQtcGNpLG1yZ19yeGJ1Zj1vbixtcT1vbix2ZWN0b3JzPTEw LHJ4X3F1ZXVlX3NpemU9MTAyNCxuZXRkZXY9aG9zdG5ldDcsaWQ9bmV0NyxtYWM9ZTQ6MjI6MjI6 MzM6NDQ6MDcsYnVzPXBjaS4wLGFkZHI9MHg5LjB4NiAtY2hhcmRldiBwdHksaWQ9Y2hhcnNlcmlh bDAgLWRldmljZSBpc2Etc2VyaWFsLGNoYXJkZXY9Y2hhcnNlcmlhbDAsaWQ9c2VyaWFsMCAtY2hh cmRldiBzb2NrZXQsaWQ9Y2hhcnNlcmlhbDEsaG9zdD0xMjcuMC4wLjEscG9ydD0yNDQ1LHRlbG5l dCxzZXJ2ZXIsbm93YWl0IC1kZXZpY2UgaXNhLXNlcmlhbCxjaGFyZGV2PWNoYXJzZXJpYWwxLGlk PXNlcmlhbDEgLWRldmljZSB2aXJ0aW8tYmFsbG9vbi1wY2ksaWQ9YmFsbG9vbjAsYnVzPXBjaS4w LGFkZHI9MHg3IC1tc2cgdGltZXN0YW1wPW9uDQoNCkJvdGggaG9zdCBhbmQgVk0gdXNlIENlbnRP UzcuNCB3aXRoIGtlcm5lbCAzLjEwLjAtNjkzLmVsNy54ODZfNjQuIA0KVGVzdHBtZCBpbnNpZGVz IFZNIHVzZXMgRFBESzE4LjExLg0KDQpCciwNClpoaWtlIFdhbmcgDQpKRENsb3VkLCBQcm9kdWN0 IERldmVsb3BtZW50LCBJYWFTwqDCoCANCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KTW9iaWxl77yPKzg2IDEzNDY2NzE5NTY2DQpFLSBtYWls77yPd2FuZ3poaWtlQGpk LmNvbQ0KQWRkcmVzc++8jzVGIEJ1aWxkaW5nIEEsTm9ydGgtU3RhciBDZW50dXJ5IENlbnRlciw4 IEJlaWNoZW4gV2VzdCBTdHJlZXQsQ2hhb3lhbmcgRGlzdHJpY3QgQmVpamluZw0KSHR0cHM6Ly9K RENsb3VkLmNvbQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCg0K LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IE1heGltZSBDb3F1ZWxpbiBbbWFpbHRv Om1heGltZS5jb3F1ZWxpbkByZWRoYXQuY29tXSANClNlbnQ6IFRodXJzZGF5LCBOb3ZlbWJlciAx NCwgMjAxOSA2OjI0IFBNDQpUbzog546L5b+X5YWLOyBaaGlrZSBXYW5nOyBkZXZAZHBkay5vcmc7 IHN0YWJsZUBkcGRrLm9yZzsgc2VjdXJpdHlAZHBkay5vcmcNClN1YmplY3Q6IFJlOiBbZHBkay1k ZXZdIFtQQVRDSCB2Ml0gdmhvc3Q6IGZpeCB2cmluZyBtZXNzYWdlIGhhbmRsaW5nIGJyb2tlbiBp biBzb21lIGNhc2UNCg0KDQoNCk9uIDExLzE0LzE5IDExOjE2IEFNLCDnjovlv5flhYsgd3JvdGU6 DQo+IFRoYW5rcyBNYXhpbWUuIA0KPiBHbyBhaGVhZCwgeW91ciBwcm9wb3NhbCBzb3VuZHMgZ29v ZC4NCg0KDQpUaGFua3MsIGNvdWxkIHlvdSBwcm92aWRlIHRoZSBxZW11IGNvbW1hbmQgbGluZSB5 b3UgdXNlZCB0byByZXByb2R1Y2UNCnRoZSBpc3N1ZSwgYW5kIGFsc28gdGhlIGtlcm5lbCB2ZXJz aW9uPw0KDQpJdCB3aWxsIGhlbHAgdG8gZG9jdW1lbnQgdGhlIGNvbW1pdCBtZXNzYWdlLg0KDQpS ZWdhcmRzLA0KTWF4aW1lDQoNCj4gQnIsDQo+IFpoaWtlIFdhbmcgDQo+IEpEQ2xvdWQsIFByb2R1 Y3QgRGV2ZWxvcG1lbnQsIElhYVPCoMKgIA0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCj4gTW9iaWxl77yPKzg2IDEzNDY2NzE5NTY2DQo+IEUtIG1haWzvvI93YW5n emhpa2VAamQuY29tDQo+IEFkZHJlc3PvvI81RiBCdWlsZGluZyBBLE5vcnRoLVN0YXIgQ2VudHVy eSBDZW50ZXIsOCBCZWljaGVuIFdlc3QgU3RyZWV0LENoYW95YW5nIERpc3RyaWN0IEJlaWppbmcN Cj4gSHR0cHM6Ly9KRENsb3VkLmNvbQ0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCj4gDQo+IA0KPiANCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJv bTogTWF4aW1lIENvcXVlbGluIFttYWlsdG86bWF4aW1lLmNvcXVlbGluQHJlZGhhdC5jb21dIA0K PiBTZW50OiBUaHVyc2RheSwgTm92ZW1iZXIgMTQsIDIwMTkgNDo1MyBQTQ0KPiBUbzogWmhpa2Ug V2FuZzsgZGV2QGRwZGsub3JnOyBzdGFibGVAZHBkay5vcmc7IHNlY3VyaXR5QGRwZGsub3JnDQo+ IENjOiDnjovlv5flhYsNCj4gU3ViamVjdDogUmU6IFtkcGRrLWRldl0gW1BBVENIIHYyXSB2aG9z dDogZml4IHZyaW5nIG1lc3NhZ2UgaGFuZGxpbmcgYnJva2VuIGluIHNvbWUgY2FzZQ0KPiANCj4g TWF5YmUgY2hhbmdlIHRoZSB0aXRsZSB0byBzb21ldGhpbmcgbGlrZToNCj4gDQo+IHZob3N0OiBm aXggdnJpbmcgcmVxdWVzdHMgdmFsaWRhdGlvbiBicm9rZW4gaWYgbm8gRkQgaW4gcGF5bG9hZA0K PiANCj4gT24gMTEvMTMvMTkgMTI6MDMgUE0sIFpoaWtlIFdhbmcgd3JvdGU6DQo+PiBXaGVuIFZI T1NUX1VTRVJfVlJJTkdfTk9GRF9NQVNLIGlzIHNldCwgdGhlIGZkX251bSBpcyAwLA0KPj4gc28g dmFsaWRhdGVfbXNnX2ZkcygpIHdpbGwgcmV0dXJuIGVycm9yLiBJbiB0aGlzIGNhc2UsDQo+PiB0 aGUgbmVnb3RpYXRpb24gb2YgdnJpbmcgbWVzc2FnZSBiZXR3ZWVuIHZob3N0IHVzZXIgZnJvbnQg ZW5kIGFuZA0KPj4gYmFjayBlbmQgd291bGQgZmFpbCwgYW5kIGFzIGEgcmVzdWx0LCB2aG9zdCB1 c2VyIGxpbmsgY291bGQgTk9UIGJlIHVwLg0KPj4NCj4+IEhvdyB0byByZXByb2R1Y2U6DQo+PiAx LlJ1biBkcGRrIHRlc3RwbWQgaW5zaWRlcyBWTSwgd2hpY2ggbG9jYXRlcyBhdCBob3N0IHdpdGgg b3ZzK2RwZGsuDQo+PiAyLk5vdGljZSB0aGF0IGluc2lkZSBvdnMgdGhlcmUgYXJlIGVuZGxlc3Mg bG9ncyByZWdhcmRpbmcgZmFpbHVyZSB0bw0KPj4gaGFuZGxlIFZIT1NUX1VTRVJfU0VUX1ZSSU5H X0NBTEwsIGFuZCBsaW5rIG9mIHZtIGNvdWxkIE5PVCBiZSB1cC4NCj4+DQo+PiBGaXhlczogYmY0 NzIyNSAoInZob3N0OiBmaXggcG9zc2libGUgZGVuaWFsIG9mIHNlcnZpY2UgYnkgbGVha2luZyBG RHMiKQ0KPj4gU2lnbmVkLW9mZi1ieTogWmhpa2UgV2FuZyA8d2FuZ3prMzIwQDE2My5jb20+DQo+ PiAtLS0NCj4+ICBsaWIvbGlicnRlX3Zob3N0L3Zob3N0X3VzZXIuYyB8IDEzICsrKysrKysrKyst LS0NCj4+ICAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkN Cj4+DQo+IA0KPiBvdGhlcndpc2U6DQo+IA0KPiBSZXZpZXdlZC1ieTogTWF4aW1lIENvcXVlbGlu IDxtYXhpbWUuY29xdWVsaW5AcmVkaGF0LmNvbT4NCj4gDQo+IFRoZSB0aXRsZSBjYW4gYmUgY2hh bmdlZCB3aGlsZSBhcHBseWluZyBpZiB5b3UgYWdyZWUgd2l0aCBpdCwgbm8gbmVlZCB0bw0KPiBz ZW5kIHYzLg0KPiANCj4gSSdsbCB0YWtlIGNhcmUgb2YgdGhlIGRpZmZlcmVudCBiYWNrcG9ydHMu DQo+IA0KPiBUaGFua3MsDQo+IE1heGltZQ0KPiANCg0K