Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp935669rwd; Wed, 7 Jun 2023 08:46:41 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4Ie20A/mLelHcxizXkIgzeBIEqWlckhmKpGNOIJLG2+FBJNr+BpReeLqwqm6sjOn23mqTV X-Received: by 2002:a05:6a20:12ce:b0:117:5a5e:8374 with SMTP id v14-20020a056a2012ce00b001175a5e8374mr1757139pzg.0.1686152800935; Wed, 07 Jun 2023 08:46:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686152800; cv=none; d=google.com; s=arc-20160816; b=x9eVesw4+EOq0+cta3GadjNsYSt1j5IKaQ/aPmd4hsLY5aYhFem5wSDoRDrrxZ5WRm NSBdOtuRLVMHWSuas/Jj4K5aav2imw1/dNoW44jZyQvz9i1H+JJxIgeq/Jj3PqlXLYm9 39RDitsCOi4nQoWDOvz4e2z5nXrsOI+wprBovpaZLuSly4L8oP3PmeodY6Slyfy91Jfp TdienmUuLcPhLLPX9Au/tlwJ7drYdgljPwHT21qnsP2CoqqMgoVX1xfORmC+SzWcKjg6 lubB6iPxkl/k7NcrkVcMZYtrsIAhUWsZenA7zyY1i16hZ7YICAE1+ZqVUl/TTaPtg5wx /dGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from; bh=5R9dH2ts3nMb4A/BOebHmo+SM7FEB5kv6tXfNDHtZAo=; b=lpMlqiQFBGwf02TfMSyQoRbeQ4DPZS4cFAatgcIGx5YIK2e7ICHz5JfL5L/p3DqzbW yvoE2fVElX8S7mL0GO0rjtDfc8x7ArIS1bvTfJgm5x9E4kk5ciN/1UGYQ09aThc3Fe4t Fa8y/Q7FUUb8iL7CE8LH8jznb0ui4kQBTOl/qCscF9m9sKkfzfNIeIv8lCgROmZ0x3gW JN+dcWnceXcsS5LcS+bo09Ks/3NkYO1JfGEAbGqOf+KXKROYWAWkfHSFFPzuEJp8qoFM T3XjfUhbkiZqAF5A5AVSzRfQ32jPMRV1yvXZ8g8tX8CjTYtWseLXfkps16HsqyM2xGvr c4JA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id r17-20020a638f51000000b005440e979e59si1467281pgn.828.2023.06.07.08.46.25; Wed, 07 Jun 2023 08:46:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241301AbjFGPTP (ORCPT + 99 others); Wed, 7 Jun 2023 11:19:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60294 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241298AbjFGPTL (ORCPT ); Wed, 7 Jun 2023 11:19:11 -0400 Received: from baidu.com (mx21.baidu.com [220.181.3.85]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5181C1BE2; Wed, 7 Jun 2023 08:19:01 -0700 (PDT) From: "Duan,Muquan" To: Eric Dumazet CC: "davem@davemloft.net" , "dsahern@kernel.org" , "kuba@kernel.org" , "pabeni@redhat.com" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v2] tcp: fix connection reset due to tw hashdance race. Thread-Topic: [PATCH v2] tcp: fix connection reset due to tw hashdance race. Thread-Index: AQHZmEIvBn0+XWKPJ0K4vDCWGljg2q981HwAgAHkBoCAABoBgIAAHXsA Date: Wed, 7 Jun 2023 15:18:28 +0000 Message-ID: References: <20230606064306.9192-1-duanmuquan@baidu.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.14.117.46] Content-Type: text/plain; charset="utf-8" Content-ID: <61F7F721C2013547A27891E02D2CEEB6@internal.baidu.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-FEAS-Client-IP: 172.31.51.20 X-FE-Last-Public-Client-IP: 100.100.100.49 X-FE-Policy-ID: 15:10:21:SYSTEM X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGksIEVyaWMsDQoNClRoYW5rcyBmb3IgeW91ciByZXBseSENCk9uZSBtb2R1bGUgb2Ygb3VyIENE TiBwcm9kdWN0IHN1ZmZlcmVkIGZyb20gdGhlICBjb25uZWN0aW9uIHJlZnVzZSBlcnJvciBjYXVz ZWQgYnkgdGhlIGhhc2hkYW5jZSByYWNlLCAgICBJIGFtIHRyeWluZyB0byBzb2x2ZSB0aGlzIGlz c3VlIHRoYXQgaHVydCB1c2VybGFuZCBhcHBsaWNhdGlvbnMsIG5vdCAgYWxsIHRoZSBwb3NzaWJs ZSBjYXNlcy4gRXhjZXB0IHRoaXMgcmVzZXQgY2FzZSwgdGhlIHdvcnN0IGNhc2UgSSBjYW4gZmln dXJlIG91dCBpcyB0aGUgbG9zdCBvZiB0aGUgcGFzc2l2ZSBjbG9zZXLigJlzIEZJTiB3aGljaCB3 aWxsIGNhdXNlIGEgcmV0cmFuc21pc3Npb24sIHRoaXMga2luZCBvZiBjYXNlIHdpbGwgbm90IGNh dXNlIGFuIGVycm9yIG9uIGFwcGxpY2F0aW9ucywgYW5kIHRoZSBwb3NzaWJpbGl0eSBpcyB2ZXJ5 IHNtYWxsLCBJIHRoaW5rIHdlIGRvIG5vdCBuZWVkIHRvIGludHJvZHVjZSByZWFkZXLigJlzIGxv Y2sgZm9yIHRoaXMga2luZCBvZiBjYXNlcy4NCg0KSSBjYW4ndCBhZ3JlZSBtb3JlIHRoYXQgd2Ug dHJpZWQgdG9vIGhhcmQgdG8g4oCYZGV0ZWN0IHJhY2Vz4oCZLCBidXQgSSBhbHNvIGhhdmUgY29u Y2VybiBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaWYgaW50cm9kdWNpbmcgcmVhZGVy4oCZcyBsb2Nr LCBkbyB3ZSBoYXZlIGFueSB0ZXN0IHJlc3VsdCBhYm91dCB0aGUgcGVyZm9ybWFuY2Ugd2l0aCB0 aGUgcmVhZGVy4oCZcyBsb2NrPyBJIHdpbGwgYWxzbyBkbyBzb21lIHRlc3Qgb24gdGhpcywgaWYg dGhlIGltcGFjdCBjYW4gYmUgdG9sZXJhdGVkLCB3ZeKAmWQgYmV0dGVyIGludHJvZHVjZSB0aGUg bG9jay4NCg0KQW55d2F5LCBJIHRoaW5rIHR3IHNvY2sncyB0d19yZWZjbnQgc2hvdWxkIGJlIHNl dCBiZWZvcmUgYWRkZWQgdHcgaW50byB0aGUgbGlzdCwgYW5kICB0aGlzIG1vZGlmaWNhdGlvbiBj YW4gbWFrZSB0aGUgc2V0dGluZyBvZiByZWZjbnQgaW4gdGhlIHNwaW5fbG9ja+KAmXMgcHJvdGVj dGlvbiwgIHdoYXQgaXMgeW91ciBvcGluaW9uIGFib3V0IHRoaXMgbW9kaWZpY2F0aW9uPyANCg0K MTQ1ICAgIHNwaW5fbG9jayhsb2NrKTsNCjE0NiAgICAgDQoxNDcgICAgIC8qIHR3X3JlZmNudCBp cyBzZXQgdG8gMyBiZWNhdXNlIHdlIGhhdmUgOg0KMTQ4ICAgICAgKiAtIG9uZSByZWZlcmVuY2Ug Zm9yIGJoYXNoIGNoYWluLiANCjE0OSAgICAgICogLSBvbmUgcmVmZXJlbmNlIGZvciBlaGFzaCBj aGFpbi4NCjE1MCAgICAgICogLSBvbmUgcmVmZXJlbmNlIGZvciB0aW1lci4NCjE1MSAgICAgICog V2UgY2FuIHVzZSBhdG9taWNfc2V0KCkgYmVjYXVzZSBwcmlvciBzcGluX2xvY2soKS9zcGluX3Vu bG9jaygpDQoxNTIgICAgICAqIGNvbW1pdHRlZCBpbnRvIG1lbW9yeSBhbGwgdHcgZmllbGRzLg0K MTUzICAgICAgKiBBbHNvIG5vdGUgdGhhdCBhZnRlciB0aGlzIHBvaW50LCB3ZSBsb3N0IG91ciBp bXBsaWNpdCByZWZlcmVuY2UNCjE1NCAgICAgICogc28gd2UgYXJlIG5vdCBhbGxvd2VkIHRvIHVz ZSB0dyBhbnltb3JlLiANCjE1NSAgICAgICovDQoxNTYgICAgIHJlZmNvdW50X3NldCgmdHctPnR3 X3JlZmNudCwgMyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoxNTcgICAgIGluZXRfdHdza19h ZGRfbm9kZV90YWlsX3JjdSh0dywgJmVoZWFkLT5jaGFpbik7DQoxNTggICAgIA0KMTU5ICAgICAv KiBTdGVwIDM6IFJlbW92ZSBTSyBmcm9tIGhhc2ggY2hhaW4gKi8NCjE2MCAgICAgaWYgKF9fc2tf bnVsbHNfZGVsX25vZGVfaW5pdF9yY3Uoc2spKQ0KMTYxICAgICAgICAgc29ja19wcm90X2ludXNl X2FkZChzb2NrX25ldChzayksIHNrLT5za19wcm90LCAtMSk7DQoxNjIgICAgICAgICANCjE2MyAg ICAgc3Bpbl91bmxvY2sobG9jayk7DQoNCg0KICANCkJUVywgSSBtZXQgdHJvdWJsZSBvbiBzZW5k aW5nIGVtYWlscywgIGFuZCBzb21lIGVtYWlscyBtYXkgbm90IGRlbGl2ZXJlZCwgdGhhbmtzIGEg bG90IGZvciBKYXNvbiBhbmQgU2ltb27igJlzIGNvbW1lbnRzIQ0KDQpCZXN0IFJlZ2FyZHMhDQpE dWFuDQoNCg0KDQoNCj4gMjAyM+W5tDbmnIg35pelIOS4i+WNiDk6MzLvvIxFcmljIER1bWF6ZXQg PGVkdW1hemV0QGdvb2dsZS5jb20+IOWGmemBk++8mg0KPiANCj4gT24gV2VkLCBKdW4gNywgMjAy MyBhdCAxOjU54oCvUE0gRHVhbixNdXF1YW4gPGR1YW5tdXF1YW5AYmFpZHUuY29tPiB3cm90ZToN Cj4+IA0KPj4gSGksIEVyaWMsDQo+PiANCj4+IFRoYW5rcyBmb3IgeW91ciBjb21tZW50cyENCj4+ IA0KPj4gQWJvdXQgdGhlIHNlY29uZCBsb29rdXAsIEkgYW0gc29ycnkgdGhhdCBJIGRpZCBub3Qg Z2l2ZSBlbm91Z2ggZXhwbGFuYXRpb25zIGFib3V0IGl0LiBIZXJlIGFyZSBzb21lIGRldGFpbHM6 DQo+PiANCj4+IDEuICBUaGUgc2Vjb25kIGxvb2t1cCBjYW4gZmluZCB0aGUgdHcgc29jayBhbmQg YXZvaWQgdGhlIGNvbm5lY3Rpb24gcmVmdXNlIGVycm9yIG9uIHVzZXJsYW5kIGFwcGxpY2F0aW9u czoNCj4+IA0KPj4gSWYgdGhlIG9yaWdpbmFsIHNvY2sgaXMgZm91bmQsIGJ1dCB3aGVuIHZhbGlk YXRpbmcgaXRzIHJlZmNudCwgaXQgaGFzIGJlZW4gZGVzdHJveWVkIGFuZCBza19yZWZjbnQgaGFz IGJlY29tZSAwIGFmdGVyIGRlY3JlYXNlZCBieSB0Y3BfdGltZV93YWl0KCktPnRjcF9kb25lKCkt PmluZXRfY3NrX2Rlc3Rvcnlfc29jaygpLT5zb2NrX3B1dCgpLlRoZSB2YWxpZGF0aW9uIGZvciBy ZWZjbnQgZmFpbHMgYW5kIHRoZSBsb29rdXAgcHJvY2VzcyBnZXRzIGEgbGlzdGVuZXIgc29jay4N Cj4+IA0KPj4gV2hlbiB0aGlzIGNhc2Ugb2NjdXJzLCB0aGUgaGFzaGRhbmNlIGhhcyBkZWZpbml0 ZWx5IGZpbmlzaGVk77yMYmVjYXVzZSB0Y3BfZG9uZSgpIGlzIGV4ZWN1dGVkIGFmdGVyIGluZXRf dHdza19oYXNoZGFuY2UoKS4gVGhlbiBpZiBsb29rIHVwIHRoZSBlaGFzaCB0YWJsZSBhZ2Fpbiwg aGFzaGRhbmNlIGhhcyBhbHJlYWR5IGZpbmlzaGVkLCB0dyBzb2NrIHdpbGwgYmUgZm91bmQuDQo+ PiANCj4+IFdpdGggdGhpcyBmaXgsIGxvZ2ljYWxseSB3ZSBjYW4gc29sdmUgdGhlIGNvbm5lY3Rp b24gcmVzZXQgaXNzdWUgY29tcGxldGVseSB3aGVuIG5vIGVzdGFibGlzaGVkIHNvY2sgaXMgZm91 bmQgZHVlIHRvIGhhc2hkYW5jZSByYWNlLkluIG15IHJlcHJvZHVjaW5nIGVudmlyb25tZW50LCB0 aGUgY29ubmVjdGlvbiByZWZ1c2UgZXJyb3Igd2lsbCBvY2N1ciBhYm91dCBldmVyeSA2IGhvdXJz IHdpdGggb25seSB0aGUgZml4IG9mIGJhZCBjYXNlICgyKS4gQnV0IHdpdGggYm90aCBvZiB0aGUg MiBmaXhlcywgSSB0ZXN0ZWQgaXQgbWFueSB0aW1lcywgdGhlIGxvbmdlc3QgdGVzdCBjb250aW51 ZXMgZm9yIDEwIGRheXMsIGl0IGRvZXMgbm90IG9jY3VyIGFnYWluLA0KPj4gDQo+PiANCj4+IA0K Pj4gMi4gQWJvdXQgdGhlIHBlcmZvcm1hbmNlIGltcGFjdDoNCj4+IA0KPj4gICAgIEEgc2ltaWxh ciBzY2VuYXJpbyBpcyB0aGF0IF9faW5ldF9sb29rdXBfZXN0YWJsaXNoZWQoKSB3aWxsIGRvIGlu ZXRfbWF0Y2goKSBjaGVjayBmb3IgdGhlIHNlY29uZCB0aW1lLCBpZiBmYWlscyBpdCB3aWxsIGxv b2sgdXAgICAgdGhlIGxpc3QgYWdhaW4uIEl0IGlzIHRoZSBleHRyYSBlZmZvcnQgdG8gcmVkdWNl IHRoZSByYWNlIGltcGFjdCB3aXRob3V0IHVzaW5nIHJlYWRlciBsb2NrLiBpbmV0X21hdGNoKCkg ZmFpbHVyZSBvY2N1cnMgd2l0aCBhYm91dCB0aGUgc2FtZSBwcm9iYWJpbGl0eSB3aXRoIHJlZmNu dCB2YWxpZGF0aW9uIGZhaWx1cmUgaW4gbXkgdGVzdCBlbnZpcm9ubWVudC4NCj4+IA0KPj4gVGhl IHNlY29uZCBsb29rdXAgd2lsbCBvbmx5IGJlIGRvbmUgaW4gdGhlIGNvbmRpdGlvbiB0aGF0IEZJ TiBzZWdtZW50IGdldHMgYSBsaXN0ZW5lciBzb2NrLg0KPj4gDQo+PiAgQWJvdXQgdGhlIHBlcmZv cm1hbmNlIGltcGFjdDoNCj4+IA0KPj4gMSkgIE1vc3Qgb2YgdGhlIHRpbWUsIHRoaXMgY29uZGl0 aW9uIHdpbGwgbm90IG1ldCwgdGhlIGFkZGVkIGNvZGVzIGludHJvZHVjZXMgYXQgbW9zdCAzIGNv bXBhcmlzb25zIGZvciBlYWNoIHNlZ21lbnQuDQo+PiANCj4+IFRoZSBzZWNvbmQgaW5ldF9tYXRj aCgpIGluIF9faW5ldF9sb29rdXBfZXN0YWJsaXNoZWQoKSAgZG9lcyBsZWFzdCAzIGNvbXBhcmlz b25zIGZvciBlYWNoIHNlZ21ldC4NCj4+IA0KPj4gDQo+PiAyKSAgV2hlbiB0aGlzIGNvbmRpdGlv biBpcyBtZXQsIHRoZSBwcm9iYWJpbGl0eSBpcyB2ZXJ5IHNtYWxsLiBUaGUgaW1wYWN0IGlzIHNp bWlsYXIgdG8gdGhlIHNlY29uZCB0cnkgZHVlIHRvIGluZXRfbWF0Y2goKSBmYWlsdXJlLiBTaW5j ZSB0dyBzb2NrIGNhbiBkZWZpbml0ZWx5IGJlIGZvdW5kIGluIHRoZSBzZWNvbmQgdHJ5LCBJIHRo aW5rIHRoaXMgY29zdCBpcyB3b3J0aHkgdG8gYXZvaWQgY29ubmVjdGlvbiByZXVzZWQgZXJyb3Ig b24gdXNlcmxhbmQgYXBwbGljYXRpb25zLg0KPj4gDQo+PiANCj4+IA0KPj4gTXkgdW5kZXJzdGFu ZGluZyBpcywgY3VycmVudCBwaGlsb3NvcGh5IGlzIGF2b2lkaW5nIHRoZSByZWFkZXIgbG9jayBi eSB0b2xlcmF0aW5nIHRoZSBtaW5vciBkZWZlY3Qgd2hpY2ggb2NjdXJzIGluIGEgc21hbGwgcHJv YmFiaWxpdHkuRm9yIGV4YW1wbGUsIGlmIHRoZSBGSU4gZnJvbSBwYXNzaXZlIGNsb3NlciBpcyBk cm9wcGVkIGR1ZSB0byB0aGUgZm91bmQgc29jayBpcyBkZXN0cm95ZWQsIGEgcmV0cmFuc21pc3Np b24gY2FuIGJlIHRvbGVyYXRlZCwgaXQgb25seSBtYWtlcyB0aGUgY29ubmVjdGlvbiB0ZXJtaW5h dGlvbiBzbG93ZXIuIEJ1dCBJIHRoaW5rIHRoZSBib3R0b20gbGluZSBpcyB0aGF0IGl0IGRvZXMg bm90IGFmZmVjdCB0aGUgdXNlcmxhbmQgYXBwbGljYXRpb25z4oCZIGZ1bmN0aW9uYWxpdHkuIElm IGFwcGxpY2F0aW9uIGZhaWxzIHRvIGNvbm5lY3QgZHVlIHRvIHRoZSBoYXNoZGFuY2UgcmFjZSwg aXQgY2Fu4oCZdCBiZSB0b2xlcmF0ZWQuIEluIGZhY3QsIGd1eXMgZnJvbSBwcm9kdWN0IGRlcGFy dG1lbnQgcHVzaCBoYXJkIG9uIHRoZSBjb25uZWN0aW9uIHJlZnVzZSBlcnJvci4NCj4+IA0KPj4g DQo+PiBBYm91dCBiYWQgY2FzZSAoMik6DQo+PiANCj4+IHR3IHNvY2sgaXMgZm91bmQsIGJ1dCBp dHMgdHdfcmVmY250IGhhcyBub3QgYmVlbiBzZXQgdG8gMywgaXQgaXMgc3RpbGwgMCwgdmFsaWRh dGluZyBmb3Igc2tfcmVmY250IHdpbGwgZmFpbC4NCj4+IA0KPj4gSSBkbyBub3Qga25vdyB0aGUg cmVhc29uIHdoeSBzZXR0aW5nIHR3X3JlZmNudCBhZnRlciBhZGRpbmcgaXQgaW50byBsaXN0LCBj b3VsZCBhbnlvbmUgaGVscCBwb2ludCBvdXQgdGhlIHJlYXNvbj8gSXQgYWRkcyAgZXh0cmEgcmFj ZSBiZWNhdXNlIHRoZSBuZXcgYWRkZWQgdHcgc29jayBtYXkgYmUgZm91bmQgYW5kIGNoZWNrZWQg aW4gb3RoZXIgQ1BVIGNvbmN1cnJlbnRseSBiZWZvcmUgxpJzZXR0aW5nIHR3X3JlZmNudCB0byAz Lg0KPj4gDQo+PiBCeSBzZXR0aW5nIHR3X3JlZmNudCB0byAzIGJlZm9yZSBhZGRpbmcgaXQgaW50 byBsaXN0LCB0aGlzIGNhc2Ugd2lsbCBiZSBzb2x2ZWQsIGFuZCBhbG1vc3Qgbm8gY29zdC4gSW4g bXkgcmVwcm9kdWNpbmcgZW52aXJvbm1lbnQsIGl0IG9jY3VycyBtb3JlIGZyZXF1ZW50bHkgdGhh biBiYWQgY2FzZSAoMSksIGl0IGFwcGVhcnMgYWJvdXQgZXZlcnkgMjAgbWludXRlcywgYmFkIGNh c2UgKDEpIGFwcGVhcnMgYWJvdXQgZXZlcnkgNiBob3Vycy4NCj4+IA0KPj4gDQo+PiANCj4+IEFi b3V0IHRoZSBidWNrZXQgc3BpbmxvY2ssIHRoZSBvcmlnaW5hbCBlc3RhYmxpc2hlZCBzb2NrIGFu ZCB0dyBzb2NrIGFyZSBzdG9yZWQgaW4gdGhlIGVoYXNoIHRhYmxlLCBJIGNvbmNlcm4gYWJvdXQg dGhlIHBlcmZvcm1hbmNlIHdoZW4gdGhlcmUgYXJlIGxvdHMgb2Ygc2hvcnQgVENQIGNvbm5lY3Rp b25zLCB0aGUgcmVhZGVyIGxvY2sgbWF5IGFmZmVjdCB0aGUgcGVyZm9ybWFuY2Ugb2YgY29ubmVj dGlvbiBjcmVhdGlvbiBhbmQgdGVybWluYXRpb24uIENvdWxkIHlvdSBzaGFyZSBzb21lIGRldGFp bHMgb2YgeW91ciBpZGVhPyBUaGFua3MgaW4gYWR2YW5jZS4NCj4+IA0KPj4gDQo+IA0KPiBBZ2Fp biwgeW91IGNhbiB3cml0ZSBhIGxvdCBvZiBzdHVmZiwgdGhlIGZhY3QgaXMgdGhhdCB5b3VyIHBh dGNoIGRvZXMNCj4gbm90IHNvbHZlIHRoZSBpc3N1ZS4NCj4gDQo+IFlvdSBjb3VsZCBhZGQgMTAg bG9va3VwcywgYW5kIHN0aWxsIG1pc3Mgc29tZSBjYXNlcywgYmVjYXVzZSB0aGV5IGFyZQ0KPiBh bGwgUkNVIGxvb2t1cHMgd2l0aCBubyBiYXJyaWVycy4NCj4gDQo+IEluIG9yZGVyIHRvIHNvbHZl IHRoZSBpc3N1ZSBvZiBwYWNrZXRzIGZvciB0aGUgc2FtZSA0LXR1cGxlIGJlaW5nDQo+IHByb2Nl c3NlZCBieSBtYW55IGNwdXMsIHRoZSBvbmx5IHdheSB0byBzb2x2ZSByYWNlcyBpcyB0byBhZGQg bXV0dWFsDQo+IGV4Y2x1c2lvbi4NCj4gDQo+IE5vdGUgdGhhdCB3ZSBhbHJlYWR5IGhhdmUgdG8g bG9jayB0aGUgYnVja2V0IHNwaW5sb2NrIGV2ZXJ5IHRpbWUgd2UNCj4gdHJhbnNpdGlvbiBhIHJl cXVlc3Qgc29ja2V0IHRvIHNvY2tldCwgYSBzb2NrZXQgdG8gdGltZXdhaXQsIG9yIGFueQ0KPiBp bnNlcnQvZGVsZXRlLg0KPiANCj4gV2UgbmVlZCB0byBleHBhbmQgdGhlIHNjb3BlIG9mIHRoaXMg bG9jaywgYW5kIGNsZWFudXAgdGhpbmdzIHRoYXQgd2UNCj4gYWRkZWQgaW4gdGhlIHBhc3QsIGJl Y2F1c2Ugd2UgdHJpZWQgdG9vIGhhcmQgdG8gJ2RldGVjdCByYWNlcycNCj4gDQo+PiANCj4+IA0K Pj4gDQo+PiBCZXN0IFJlZ2FyZHMhDQo+PiANCj4+IER1YW4NCj4+IA0KPj4gDQo+PiAyMDIz5bm0 NuaciDbml6Ug5LiL5Y2IMzowN++8jEVyaWMgRHVtYXpldCA8ZWR1bWF6ZXRAZ29vZ2xlLmNvbT4g 5YaZ6YGT77yaDQo+PiANCj4+IE9uIFR1ZSwgSnVuIDYsIDIwMjMgYXQgODo0M+KAr0FNIER1YW4g TXVxdWFuIDxkdWFubXVxdWFuQGJhaWR1LmNvbT4gd3JvdGU6DQo+PiANCj4+IA0KPj4gSWYgdGhl IEZJTiBmcm9tIHBhc3NpdmUgY2xvc2VyIGFuZCB0aGUgQUNLIGZvciBhY3RpdmUgY2xvc2VyJ3Mg RklOIGFyZQ0KPj4gcHJvY2Vzc2VkIG9uIGRpZmZlcmVudCBDUFVzIGNvbmN1cnJlbnRseSwgdHcg aGFzaGRhbmNlIHJhY2UgbWF5IG9jY3VyLg0KPj4gT24gbG9vcGJhY2sgaW50ZXJmYWNlLCB0cmFu c21pdCBmdW5jdGlvbiBxdWV1ZXMgYSBza2IgdG8gY3VycmVudCBDUFUncw0KPj4gc29mdG5ldCdz IGlucHV0IHF1ZXVlIGJ5IGRlZmF1bHQuIFN1cHBvc2UgYWN0aXZlIGNsb3NlciBydW5zIG9uIENQ VSAwLA0KPj4gYW5kIHBhc3NpdmUgY2xvc2VyIHJ1bnMgb24gQ1BVIDEuIElmIHRoZSBBQ0sgZm9y IHRoZSBhY3RpdmUgY2xvc2VyJ3MNCj4+IEZJTiBpcyBzZW50IHdpdGggbm8gZGVsYXksIGl0IHdp bGwgYmUgcHJvY2Vzc2VkIGFuZCB0dyBoYXNoZGFuY2Ugd2lsbA0KPj4gYmUgZG9uZSBvbiBDUFUg MDsgVGhlIHBhc3NpdmUgY2xvc2VyJ3MgRklOIHdpbGwgYmUgc2VudCBpbiBhbm90aGVyDQo+PiBz ZWdtZW50IGFuZCBwcm9jZXNzZWQgb24gQ1BVIDEsIGl0IG1heSBmYWlsIHRvIGZpbmQgdHcgc29j ayBpbiB0aGUNCj4+IGVoYXNoIHRhYmxlIGR1ZSB0byB0dyBoYXNoZGFuY2Ugb24gQ1BVIDAsIHRo ZW4gZ2V0IGEgUkVTRVQuDQo+PiBJZiBhcHBsaWNhdGlvbiByZWNvbm5lY3RzIGltbWVkaWF0ZWx5 IHdpdGggdGhlIHNhbWUgc291cmNlIHBvcnQsIGl0DQo+PiB3aWxsIGdldCByZXNldCBiZWNhdXNl IHR3IHNvY2sncyB0d19zdWJzdGF0ZSBpcyBzdGlsbCBUQ1BfRklOX1dBSVQyLg0KPj4gDQo+PiBU aGUgZG1lc2cgdG8gdHJhY2UgZG93biB0aGlzIGlzc3VlOg0KPj4gDQo+PiAuMzMzNTE2XSB0Y3Bf c2VuZF9maW46IHNrIDAwMDAwMDAwOTIxMDVhZDIgY29va2llIDkgY3B1IDMNCj4+IC4zMzM1MjRd IHJjdl9zdGF0ZV9wcm9jZXNzOkZJTl9XQUlUMiBzayAwMDAwMDAwMDkyMTA1YWQyIGNvb2tpZSA5 IGNwdSAzDQo+PiAuMzMzNTM0XSB0Y3BfY2xvc2U6IHRjcF90aW1lX3dhaXQ6IHNrIDAwMDAwMDAw OTIxMDVhZDIgY29va2llIDkgY3B1IDMNCj4+IC4zMzM1MzhdIGhhc2hkYW5jZTogdHcgMDAwMDAw MDA2OTBmZGI3YSBhZGRlZCB0byBlaGFzaCBjb29raWUgOSBjcHUgMw0KPj4gLjMzMzU0MV0gaGFz aGRhbmNlOiBzayAwMDAwMDAwMDkyMTA1YWQyIHJlbW92ZWQgY29va2llIDkgY3B1IDMNCj4+IC4z MzM1NDRdIF9faW5ldF9sb29rdXBfZXN0YWJsaXNoZWQ6IEZhaWxlZCB0aGUgcmVmY291bnQgY2hl Y2s6DQo+PiAgICAgICAgICAgICAgICAhcmVmY291bnRfaW5jX25vdF96ZXJvIDAwMDAwMDAwNjkw ZmRiN2EgcmVmIDAgY29va2llIDkgY3B1IDANCj4+IC4zMzM1NDldIGhhc2hkYW5jZTogdHcgMDAw MDAwMDA2OTBmZGI3YSBiZWZvcmUgYWRkIHJlZiAwIGNvb2tpZSA5IGNwdSAzDQo+PiAuMzMzNTUy XSByY3Zfc3RhdGU6IFJTVCBmb3IgRklOIGxpc3RlbiAwMDAwMDAwMDNjNTBhZmE2IGNvb2tpZSAw IGNwdSAwDQo+PiAuMzMzNTc0XSB0Y3Bfc2VuZF9maW46IHNrIDAwMDAwMDAwNjY3NTdiZjggcmVm IDIgY29va2llIDAgY3B1IDANCj4+IC4zMzM2MTFdIHRpbWV3YWl0X3N0YXRlOiBUQ1BfVFdfUlNU IHR3IDAwMDAwMDAwNjkwZmRiN2EgY29va2llIDkgY3B1IDANCj4+IC4zMzM2MjZdIHRjcF9jb25u ZWN0OiBzayAwMDAwMDAwMDY2NzU3YmY4IGNwdSAwIGNvb2tpZSAwDQo+PiANCj4+IEhlcmUgaXMg dGhlIGNhbGwgdHJhY2UgbWFwOg0KPj4gDQo+PiBDUFUgMCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIENQVSAxDQo+PiANCj4+IC0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLS0tLS0tLS0NCj4+IHRjcF9jbG9zZSgpDQo+PiB0Y3Bfc2VuZF9maW4oKQ0K Pj4gbG9vcGJhY2tfeG1pdCgpDQo+PiBuZXRpZl9yeCgpDQo+PiB0Y3BfdjRfcmN2KCkNCj4+IHRj cF9hY2tfc25kX2NoZWNrKCkNCj4+IGxvb3BiYWNrX3htaXQNCj4+IG5ldGlmX3J4KCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY2xvc2UoKQ0KPj4gLi4uICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRjcF9zZW5kX2ZpbigpDQo+PiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsb29wYmFja194bWl0KCkNCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlmX3J4KCkN Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF92NF9yY3YoKQ0KPj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLi4uDQo+PiB0Y3BfdGltZV93YWl0KCkNCj4+IGluZXRfdHdza19oYXNoZGFuY2UoKSB7 DQo+PiAuLi4NCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8LV9faW5ldF9s b29rdXBfZXN0YWJsaXNoZWQoKQ0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmFkIGNhc2UgKDEpLCBmaW5kIHNrLCBtYXkg ZmFpbCB0d19yZWZjbnQgY2hlY2spDQo+PiBpbmV0X3R3c2tfYWRkX25vZGVfdGFpbF9yY3UodHcs IC4uLikNCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8LV9faW5ldF9sb29r dXBfZXN0YWJsaXNoZWQoKQ0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoYmFkIGNhc2UgKDEpLCBmaW5kIHNrLCBtYXkgZmFp bCB0d19yZWZjbnQgY2hlY2spDQo+PiANCj4+IF9fc2tfbnVsbHNfZGVsX25vZGVfaW5pdF9yY3Uo c2spDQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC1fX2luZXRfbG9va3Vw X2VzdGFibGlzaGVkKCkNCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGJhZCBjYXNlICgyKSwgZmluZCB0dywgbWF5IGZhaWwg dHdfcmVmY250IGNoZWNrKQ0KPj4gcmVmY291bnRfc2V0KCZ0dy0+dHdfcmVmY250LCAzKQ0KPj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtX19pbmV0X2xvb2t1cF9lc3RhYmxp c2hlZCgpDQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChnb29kIGNhc2UsIGZpbmQgdHcsIHR3X3JlZmNudCBpcyBub3QgMCkN Cj4+IC4uLg0KPj4gfQ0KPj4gDQo+PiBUaGlzIGlzc3VlIG9jY3VycyB3aXRoIGEgc21hbGwgcHJv YmFiaWxpdHkgb24gb3VyIGFwcGxpY2F0aW9uIHdvcmtpbmcNCj4+IG9uIGxvb3BiYWNrIGludGVy ZmFjZSwgY2xpZW50IGdldHMgYSBjb25uZWN0aW9uIHJlZnVzZWQgZXJyb3Igd2hlbiBpdA0KPj4g cmVjb25uZWN0cy4gSW4gcmVwcm9kdWNpbmcgZW52aXJvbm1lbnRzIG9uIGtlcm5lbCA0LjE0LDUu MTAgYW5kDQo+PiA2LjQtcmMxLCBtb2RpZnkgdGNwX2Fja19zbmRfY2hlY2soKSB0byBkaXNhYmxl IGRlbGF5IGFjayBhbGwgdGhlDQo+PiB0aW1lOyBMZXQgY2xpZW50IGNvbm5lY3Qgc2VydmVyIGFu ZCBzZXJ2ZXIgc2VuZHMgYSBtZXNzYWdlIHRvIGNsaWVudA0KPj4gdGhlbiBjbG9zZSB0aGUgY29u bmVjdGlvbjsgUmVwZWF0IHRoaXMgcHJvY2VzcyBmb3JldmVyOyBMZXQgdGhlIGNsaWVudA0KPj4g YmluZCB0aGUgc2FtZSBzb3VyY2UgcG9ydCBldmVyeSB0aW1lLCBpdCBjYW4gYmUgcmVwcm9kdWNl ZCBpbiBhYm91dCAyMA0KPj4gbWludXRlcy4NCj4+IA0KPj4gQnJpZWYgb2YgdGhlIHNjZW5hcmlv Og0KPj4gDQo+PiAxLiBTZXJ2ZXIgcnVucyBvbiBDUFUgMCBhbmQgQ2xpZW50IHJ1bnMgb24gQ1BV IDEuIFNlcnZlciBjbG9zZXMNCj4+IGNvbm5lY3Rpb24gYWN0aXZlbHkgYW5kIHNlbmRzIGEgRklO IHRvIGNsaWVudC4gVGhlIGxvb2tiYWNrJ3MgZHJpdmVyDQo+PiBlbnF1ZXVlcyB0aGUgRklOIHNl Z21lbnQgdG8gYmFja2xvZyBxdWV1ZSBvZiBDUFUgMCB2aWENCj4+IGxvb3BiYWNrX3htaXQoKS0+ bmV0aWZfcngoKSwgb25lIG9mIHRoZSBjb25kaXRpb25zIGZvciBub24tZGVsYXkgYWNrDQo+PiBt ZWV0cyBpbiBfX3RjcF9hY2tfc25kX2NoZWNrKCksIGFuZCB0aGUgQUNLIGlzIHNlbnQgaW1tZWRp YXRlbHkuDQo+PiANCj4+IDIuIE9uIGxvb3BiYWNrIGludGVyZmFjZSwgdGhlIEFDSyBpcyByZWNl aXZlZCBhbmQgcHJvY2Vzc2VkIG9uIENQVSAwLA0KPj4gdGhlICdkYW5jZScgZnJvbSBvcmlnaW5h bCBzb2NrIHRvIHR3IHNvY2sgd2lsbCBwZXJmcm9tLCB0dyBzb2NrIHdpbGwNCj4+IGJlIGluc2Vy dGVkIHRvIGVoYXNoIHRhYmxlLCB0aGVuIHRoZSBvcmlnaW5hbCBzb2NrIHdpbGwgYmUgcmVtb3Zl ZC4NCj4+IA0KPj4gMy4gT24gQ1BVIDEsIGNsaWVudCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24sIGEg RklOIHNlZ21lbnQgaXMgc2VudCBhbmQNCj4+IHByb2Nlc3NlZCBvbiBDUFUgMS4gV2hlbiBpdCBp cyBsb29raW5nIHVwIHNvY2sgaW4gZWhhc2ggdGFibGUgKHdpdGggbm8NCj4+IGxvY2spLCB0dyBo YXNoZGFuY2UgcmFjZSBtYXkgb2NjdXIsIGl0IGZhaWxzIHRvIGZpbmQgdGhlIHR3IHNvY2sgYW5k DQo+PiBnZXQgYSBsaXN0ZW5lciBzb2NrIGluIHRoZSBmbG93aW5nIDMgY2FzZXM6DQo+PiANCj4+ ICgxKSBPcmlnaW5hbCBzb2NrIGlzIGZvdW5kLCBidXQgaXQgaGFzIGJlZW4gZGVzdHJveWVkIGFu ZCBza19yZWZjbnQNCj4+ICAgICAgICAgaGFzIGJlY29tZSAwIHdoZW4gdmFsaWRhdGluZyBpdC4N Cj4+ICgyKSB0dyBzb2NrIGlzIGZvdW5kLCBidXQgaXRzIHR3X3JlZmNudCBoYXMgbm90IGJlZW4g c2V0IHRvIDMsIGl0IGlzDQo+PiAgICAgICAgIHN0aWxsIDAsIHZhbGlkYXRpbmcgZm9yIHNrX3Jl ZmNudCB3aWxsIGZhaWwuDQo+PiAoMykgRm9yIHZlcnNpb25zIHdpdGhvdXQgRXJpYyBhbmQgSmFz b24ncyBjb21taXQoM2Y0Y2E1ZmFmYzA4ODgxZDdhNQ0KPj4gICAgICAgICA3ZGFhMjA0NDlkMTcx ZjI4ODcwNDMpLCB0dyBzb2NrIGlzIGFkZGVkIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0Lg0KPj4g ICAgICAgICBJdCB3aWxsIGJlIG1pc3NlZCBpZiB0aGUgbGlzdCBpcyB0cmF2ZXJzZWQgYmVmb3Jl IHR3IHNvY2sgaXMNCj4+ICAgICAgICAgYWRkZWQuIEFuZCBpZiB0aGUgb3JpZ2luYWwgc29jayBp cyByZW1vdmVkIGJlZm9yZSBpdCBpcyBmb3VuZCwgbm8NCj4+ICAgICAgICAgZXN0YWJsaXNoZWQg c29jayB3aWxsIGJlIGZvdW5kLg0KPj4gDQo+PiBUaGUgbGlzdGVuZXIgc29jayB3aWxsIHJlc2V0 IHRoZSBGSU4gc2VnbWVudCB3aGljaCBoYXMgYWNrIGJpdCBzZXQuDQo+PiANCj4+IDQuIElmIGNs aWVudCByZWNvbm5lY3RzIGltbWVkaWF0ZWx5IGFuZCBpcyBhc3NpZ25lZCB3aXRoIHRoZSBzYW1l DQo+PiBzb3VyY2UgcG9ydCBhcyBwcmV2aW91cyBjb25uZWN0aW9uLCB0aGUgdHcgc29jayB3aXRo IHR3X3N1YnN0YXRlDQo+PiBUQ1BfRklOX1dBSVQyIHdpbGwgcmVzZXQgY2xpZW50J3MgU1lOIGFu ZCBkZXN0cm95IGl0c2VsZiBpbg0KPj4gaW5ldF90d3NrX2Rlc2NoZWR1bGVfcHV0KCkuIEFwcGxp Y2F0aW9uIGdldHMgYSBjb25uZWN0aW9uIHJlZnVzZWQNCj4+IGVycm9yLg0KPj4gDQo+PiA1LiBJ ZiBjbGllbnQgcmVjb25uZWN0cyBhZ2FpbiwgaXQgd2lsbCBzdWNjZWVkLg0KPj4gDQo+PiBJbnRy b2R1Y2UgdGhlIGZsb3dpbmcgMiBtb2RpZmljYXRpb25zIHRvIHNvbHZlIHRoZSBhYm92ZSAzIGJh ZCBjYXNlczoNCj4+IA0KPj4gRm9yIGJhZCBjYXNlICgyKToNCj4+IFNldCB0d19yZWZjbnQgdG8g MyBiZWZvcmUgYWRkaW5nIGl0IGludG8gbGlzdC4NCj4+IA0KPj4gRm9yIGJhZCBjYXNlICgxKToN Cj4+IEluIGZ1bmN0aW9uIHRjcF92NF9yY3YoKSwgaWYgX19pbmV0X2xvb2t1cF9za2IoKSByZXR1 cm5zIGEgbGlzdGVuZXINCj4+IHNvY2sgYW5kIHRoaXMgc2VnbWVudCBoYXMgRklOIGJpdCBzZXQs IHRoZW4gcmV0cnkgdGhlIGxvb2t1cCBwcm9jZXNzDQo+PiBvbmUgdGltZS4gVGhpcyBmaXggY2Fu IGNvdmVyIGJhZCBjYXNlICgzKSBmb3IgdGhlIHZlcnNpb25zIHdpdGhvdXQNCj4+IEVyaWMgYW5k IEphc29uJ3MgZml4Lg0KPj4gDQo+PiBUaGVyZSBtYXkgYmUgYW5vdGhlciBiYWQgY2FzZSwgaWYg dGhlIG9yaWdpbmFsIHNvY2sgaXMgZm91bmQgYW5kIHBhc3Nlcw0KPj4gdmFsaWRhdGlvbiwgYnV0 IGR1cmluZyBmdXJ0aGVyIHByb2Nlc3MgZm9yIHRoZSBwYXNzaXZlIGNsb3NlcidzIEZJTiBvbg0K Pj4gQ1BVIDEsIHRoZSBzb2NrIGhhcyBiZWVuIGRlc3Ryb3llZCBvbiBDUFUgMCwgdGhlbiB0aGUg RklOIHNlZ21lbnQgd2lsbA0KPj4gYmUgZHJvcHBlZCBhbmQgcmV0cmFuc21pdHRlZC4gVGhpcyBj YXNlIGRvZXMgbm90IGh1cnQgYXBwbGljYXRpb24gYXMNCj4+IG11Y2ggYXMgcmVzZXR0aW5nIHJl Y29ubmVjdGlvbiwgYW5kIHRoaXMgY2FzZSBoYXMgbGVzcyBwb3NzaWJpbGl0eSB0aGFuDQo+PiB0 aGUgb3RoZXIgYmFkIGNhc2VzLCBpdCBkb2VzIG5vdCBvY2N1ciBvbiBvdXIgcHJvZHVjdCBhbmQg aW4NCj4+IGV4cGVyaW1lbnRhbCBlbnZpcm9ubWVudCwgc28gaXQgaXMgbm90IGNvbnNpZGVyZWQg aW4gdGhpcyBwYXRjaC4NCj4+IA0KPj4gQ291bGQgeW91IHBsZWFzZSBjaGVjayB3aGV0aGVyIHRo aXMgZml4IGlzIE9LLCBvciBhbnkgc3VnZ2VzdGlvbnM/DQo+PiBMb29raW5nIGZvcndhcmQgZm9y IHlvdXIgcHJlY2lvdXMgY29tbWVudHMhDQo+PiANCj4+IFNpZ25lZC1vZmYtYnk6IER1YW4gTXVx dWFuIDxkdWFubXVxdWFuQGJhaWR1LmNvbT4NCj4+IC0tLQ0KPj4gbmV0L2lwdjQvaW5ldF90aW1l d2FpdF9zb2NrLmMgfCAxNSArKysrKysrLS0tLS0tLS0NCj4+IG5ldC9pcHY0L3RjcF9pcHY0LmMg ICAgICAgICAgIHwgMTMgKysrKysrKysrKysrKw0KPj4gMiBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNl cnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQ0KPj4gDQo+PiBkaWZmIC0tZ2l0IGEvbmV0L2lwdjQv aW5ldF90aW1ld2FpdF9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYw0KPj4g aW5kZXggNDAwNTI0MTRjN2M3Li5lZDFmMjU1YzlhYTggMTAwNjQ0DQo+PiAtLS0gYS9uZXQvaXB2 NC9pbmV0X3RpbWV3YWl0X3NvY2suYw0KPj4gKysrIGIvbmV0L2lwdjQvaW5ldF90aW1ld2FpdF9z b2NrLmMNCj4+IEBAIC0xNDQsMTQgKzE0NCw2IEBAIHZvaWQgaW5ldF90d3NrX2hhc2hkYW5jZShz dHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgc3RydWN0IHNvY2sgKnNrLA0KPj4gDQo+PiAg ICAgICBzcGluX2xvY2sobG9jayk7DQo+PiANCj4+IC0gICAgICAgaW5ldF90d3NrX2FkZF9ub2Rl X3RhaWxfcmN1KHR3LCAmZWhlYWQtPmNoYWluKTsNCj4+IC0NCj4+IC0gICAgICAgLyogU3RlcCAz OiBSZW1vdmUgU0sgZnJvbSBoYXNoIGNoYWluICovDQo+PiAtICAgICAgIGlmIChfX3NrX251bGxz X2RlbF9ub2RlX2luaXRfcmN1KHNrKSkNCj4+IC0gICAgICAgICAgICAgICBzb2NrX3Byb3RfaW51 c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stPnNrX3Byb3QsIC0xKTsNCj4+IC0NCj4+IC0gICAgICAg c3Bpbl91bmxvY2sobG9jayk7DQo+PiAtDQo+PiAgICAgICAvKiB0d19yZWZjbnQgaXMgc2V0IHRv IDMgYmVjYXVzZSB3ZSBoYXZlIDoNCj4+ICAgICAgICAqIC0gb25lIHJlZmVyZW5jZSBmb3IgYmhh c2ggY2hhaW4uDQo+PiAgICAgICAgKiAtIG9uZSByZWZlcmVuY2UgZm9yIGVoYXNoIGNoYWluLg0K Pj4gQEAgLTE2Miw2ICsxNTQsMTMgQEAgdm9pZCBpbmV0X3R3c2tfaGFzaGRhbmNlKHN0cnVjdCBp bmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBzdHJ1Y3Qgc29jayAqc2ssDQo+PiAgICAgICAgKiBzbyB3 ZSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIHR3IGFueW1vcmUuDQo+PiAgICAgICAgKi8NCj4+ICAg ICAgIHJlZmNvdW50X3NldCgmdHctPnR3X3JlZmNudCwgMyk7DQo+PiArICAgICAgIGluZXRfdHdz a19hZGRfbm9kZV90YWlsX3JjdSh0dywgJmVoZWFkLT5jaGFpbik7DQo+PiArDQo+PiArICAgICAg IC8qIFN0ZXAgMzogUmVtb3ZlIFNLIGZyb20gaGFzaCBjaGFpbiAqLw0KPj4gKyAgICAgICBpZiAo X19za19udWxsc19kZWxfbm9kZV9pbml0X3JjdShzaykpDQo+PiArICAgICAgICAgICAgICAgc29j a19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLT5za19wcm90LCAtMSk7DQo+PiArDQo+ PiArICAgICAgIHNwaW5fdW5sb2NrKGxvY2spOw0KPj4gfQ0KPj4gRVhQT1JUX1NZTUJPTF9HUEwo aW5ldF90d3NrX2hhc2hkYW5jZSk7DQo+PiANCj4+IGRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bf aXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYw0KPj4gaW5kZXggMDZkMjU3MzY4NWNhLi4zZTNj ZWYyMDJmNzYgMTAwNjQ0DQo+PiAtLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jDQo+PiArKysgYi9u ZXQvaXB2NC90Y3BfaXB2NC5jDQo+PiBAQCAtMjAxOCw2ICsyMDE4LDE5IEBAIGludCB0Y3BfdjRf cmN2KHN0cnVjdCBza19idWZmICpza2IpDQo+PiAgICAgICBzayA9IF9faW5ldF9sb29rdXBfc2ti KG5ldC0+aXB2NC50Y3BfZGVhdGhfcm93Lmhhc2hpbmZvLA0KPj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBza2IsIF9fdGNwX2hkcmxlbih0aCksIHRoLT5zb3VyY2UsDQo+PiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRoLT5kZXN0LCBzZGlmLCAmcmVmY291bnRlZCk7DQo+PiAr DQo+PiArICAgICAgIC8qIElmIHR3ICJkYW5jZSIgaXMgcGVyZm9ybWVkIG9uIGFub3RoZXIgQ1BV LCB0aGUgbG9va3VwIHByb2Nlc3MgbWF5IGZpbmQNCj4+ICsgICAgICAgICogbm8gdHcgc29jayBm b3IgdGhlIHBhc3NpdmUgY2xvc2VyJ3MgRklOIHNlZ21lbnQsIGJ1dCBhIGxpc3RlbmVyIHNvY2ss DQo+PiArICAgICAgICAqIHdoaWNoIHdpbGwgcmVzZXQgdGhlIEZJTiBzZWdtZW50LiBJZiBhcHBs aWNhdGlvbiByZWNvbm5lY3RzIGltbWVkaWF0ZWx5DQo+PiArICAgICAgICAqIHdpdGggdGhlIHNh bWUgc291cmNlIHBvcnQsIGl0IHdpbGwgZ2V0IHJlc2V0IGJlY2F1c2UgdGhlIHR3IHNvY2sncw0K Pj4gKyAgICAgICAgKiB0d19zdWJzdGF0ZSBpcyBzdGlsbCBUQ1BfRklOX1dBSVQyLiBUcnkgdG8g Z2V0IHRoZSB0dyBzb2NrIGluIGFub3RoZXIgdHJ5Lg0KPj4gKyAgICAgICAgKi8NCj4+ICsgICAg ICAgaWYgKHVubGlrZWx5KHRoLT5maW4gJiYgc2sgJiYgc2stPnNrX3N0YXRlID09IFRDUF9MSVNU RU4pKSB7DQo+PiArICAgICAgICAgICAgICAgc2sgPSBfX2luZXRfbG9va3VwX3NrYihuZXQtPmlw djQudGNwX2RlYXRoX3Jvdy5oYXNoaW5mbywNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNrYiwgX190Y3BfaGRybGVuKHRoKSwgdGgtPnNvdXJjZSwNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoLT5kZXN0LCBzZGlmLCAmcmVmY291 bnRlZCk7DQo+PiArICAgICAgIH0NCj4+ICsNCj4+IA0KPj4gDQo+PiBJIGRvIG5vdCB0aGluayB0 aGlzIGZpeGVzIGFueXRoaW5nLCB0aGVyZSBpcyBubyBiYXJyaWVyIGJldHdlZW4gZmlyc3QNCj4+ IGFuZCBzZWNvbmQgbG9va3VwLg0KPj4gVGhpcyBtaWdodCByZWR1Y2UgcmFjZSBhIGxpdHRsZSBi aXQsIGJ1dCBhdCB0aGUgZXhwZW5zZSBvZiBleHRyYSBjb2RlDQo+PiBpbiB0aGUgZmFzdCBwYXRo Lg0KPj4gDQo+PiBJZiB5b3Ugd2FudCB0byBmaXggdGhpcyBwcm9wZXJseSwgSSB0aGluayB3ZSBu ZWVkIHRvIHJldmlzaXQgaGFuZGxpbmcNCj4+IGZvciBub24gZXN0YWJsaXNoZWQgc29ja2V0cywN Cj4+IHRvIGhvbGQgdGhlIGJ1Y2tldCBzcGlubG9jayBvdmVyIHRoZSB3aG9sZSB0aGluZy4NCj4+ IA0KPj4gVGhpcyB3aWxsIGJlIHNsaWdodGx5IG1vcmUgY29tcGxleCB0aGFuIHRoaXMuLi4NCj4+ IA0KPj4gDQoNCg==