From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by sourceware.org (Postfix) with ESMTPS id EF82E3871FB1 for ; Wed, 14 Dec 2022 23:14:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org EF82E3871FB1 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wr1-x42b.google.com with SMTP id m14so1378304wrh.7 for ; Wed, 14 Dec 2022 15:14:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=bV58hw65tuejpmmpe9NFVpUdLCUShtkR7zhDvF19E8Q=; b=Bx8Et9Qx1nI3YZogDWdzTHt0uZRnER7OucuqsJJBHa8COfaAjtvDUYjVIU6ggW3mqD j6qx0K34HUPppjXtKIG9TUCzA4j393UvhRYfo09O+xx8PNDAG9j0vl1B+NFGIG+q966A CkxEX5XqiFIoi7JNAK6JgMH3XJnxgCNxz9sF1UhYJHkWEiW5lW5bsCnbit2HccLU3FES KVl3DbjkQzKLMtPOPVEMfdEZ2wrcY0uAy4ZD4H/3k+aO0qOMcXxixdYgyCzFfijWHgVU eK/vK9oNS5nUJBqbmkd+9BTCUl37qseHhzPnagRHTViHZCsijd98BMebPqtgY5jEzNs2 YGGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=bV58hw65tuejpmmpe9NFVpUdLCUShtkR7zhDvF19E8Q=; b=l8SGNojUTXXh1SyP3JFM7DG0/VMKEBFfL4V09wU0TqwS8g3ovdH9qsD11Cvlkx8PjA uca/CUv1qCqVrOGa54CfaFMNeJxclyotkrGGiN3SUDcawaY6teu2WPdi17OmL2dz3mFY hs35P/bO2c/qQbdU914I+DkgFM9vf7KQs+/9hd0d5UpuVIWL8kACRNMIWb4x3mjVPZpk SruKGsnrKhVs89ueppy0NkSEBNnNBjdnqxd5Dn0YAb6ylnIyOQv+4vNzKk2jVHMCP9I0 1L9aLDhvZMlJagtBsHZa9gQ8yoRy1kIVViNd9bnZqkuEkXUHmV/Rh0/PHE/yZzt2Zl8Y Qfew== X-Gm-Message-State: ANoB5pniVb9wbvkrFGW6flZOSEEWTHj9vYn5gp6NpOCehH48/ve87oLT biUvkhx8+BkHTGSLyBOiQwk= X-Google-Smtp-Source: AA0mqf6NVpmNV4iTLz+Rqn4bkOWZmqSbRWhEY7pvthu1qGdztKkP4vrgowMobVpNzY7hCfEwMiUpBA== X-Received: by 2002:adf:dd51:0:b0:242:17a6:8bad with SMTP id u17-20020adfdd51000000b0024217a68badmr16427201wrm.60.1671059655597; Wed, 14 Dec 2022 15:14:15 -0800 (PST) Received: from [192.168.0.160] ([170.253.36.171]) by smtp.gmail.com with ESMTPSA id k24-20020adfd238000000b002420fe50322sm4194301wrh.91.2022.12.14.15.14.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 14 Dec 2022 15:14:15 -0800 (PST) Message-ID: Date: Thu, 15 Dec 2022 00:14:07 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.1 Subject: Re: [-Wstringop-overflow=] strncat(3) Content-Language: en-US To: Andrew Pinski Cc: gcc@gcc.gnu.org, linux-man , GNU C Library , groff , Martin Sebor References: <30a77019-ded0-fe3b-d0db-6c77842674db@gmail.com> From: Alejandro Colomar In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------0Swy0a0zXYZFlZOO2VKIRQEe" X-Spam-Status: No, score=-4.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------0Swy0a0zXYZFlZOO2VKIRQEe Content-Type: multipart/mixed; boundary="------------DCqAi3hqATIlp2YFaNcVViaj"; protected-headers="v1" From: Alejandro Colomar To: Andrew Pinski Cc: gcc@gcc.gnu.org, linux-man , GNU C Library , groff , Martin Sebor Message-ID: Subject: Re: [-Wstringop-overflow=] strncat(3) References: <30a77019-ded0-fe3b-d0db-6c77842674db@gmail.com> In-Reply-To: --------------DCqAi3hqATIlp2YFaNcVViaj Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 W0NDICs9IGdyb2ZmXQ0KDQpIaSBBbmRyZXcsDQoNCk9uIDEyLzE0LzIyIDIzOjU3LCBBbmRy ZXcgUGluc2tpIHdyb3RlOg0KPiBPbiBXZWQsIERlYyAxNCwgMjAyMiBhdCAyOjQ2IFBNIEFs ZWphbmRybyBDb2xvbWFyIHZpYSBMaWJjLWFscGhhDQo+IDxsaWJjLWFscGhhQHNvdXJjZXdh cmUub3JnPiB3cm90ZToNCj4+DQo+PiBIaSwNCj4+DQo+PiBJIHdhcyByZXdyaXRpbmcgdGhl IHN0cm5jYXQoMykgbWFudWFsIHBhZ2UsIGFuZCB3aGVuIEkgdHJpZWQgdG8gY29tcGlsZSB0 aGUNCj4+IGV4YW1wbGUgcHJvZ3JhbSwgSSBnb3QgYSBzdXJwcmlzZSBmcm9tIHRoZSBjb21w aWxlci4NCj4+DQo+PiBIZXJlIGdvZXMgdGhlIHBhZ2U6DQo+Pg0KPj4NCj4+ICAgICBzdHJu Y2F0KDMpICAgICAgICAgICAgICAgTGlicmFyeSBGdW5jdGlvbnMgTWFudWFsICAgICAgICAg ICAgICBzdHJuY2F0KDMpDQo+Pg0KPj4gICAgIE5BTUUNCj4+ICAgICAgICAgICAgc3RybmNh dCAgLSAgY29uY2F0ZW5hdGUgIGEgIG51bGzigJBwYWRkZWQgIGNoYXJhY3RlciBzZXF1ZW5j ZSBpbnRvIGENCj4+ICAgICAgICAgICAgc3RyaW5nDQo+Pg0KPj4gICAgIExJQlJBUlkNCj4+ ICAgICAgICAgICAgU3RhbmRhcmQgQyBsaWJyYXJ5IChsaWJjLCAtbGMpDQo+Pg0KPj4gICAg IFNZTk9QU0lTDQo+PiAgICAgICAgICAgICNpbmNsdWRlIDxzdHJpbmcuaD4NCj4+DQo+PiAg ICAgICAgICAgIGNoYXIgKnN0cm5jYXQoY2hhciAqcmVzdHJpY3QgZHN0LCBjb25zdCBjaGFy IHNyY1tyZXN0cmljdCAuc3pdLA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3Qgc3opOw0KPj4NCj4+ICAgICBERVNDUklQVElPTg0KPj4gICAgICAgICAgICBUaGlzIGZ1 bmN0aW9uIGNhdGVuYXRlcyB0aGUgaW5wdXQgY2hhcmFjdGVyIHNlcXVlbmNlIGNvbnRhaW5l ZCAgaW4NCj4+ICAgICAgICAgICAgYSAgbnVsbOKAkHBhZGRlZCAgZml4ZWTigJB3aWR0aCAg YnVmZmVyLCAgaW50byAgYSBzdHJpbmcgYXQgdGhlIGJ1ZmZlcg0KPj4gICAgICAgICAgICBw b2ludGVkIHRvIGJ5IGRzdC4gIFRoZSBwcm9ncmFtbWVyIGlzIHJlc3BvbnNpYmxlIGZvciBh bGxvY2F0aW5nIGENCj4+ICAgICAgICAgICAgYnVmZmVyIGxhcmdlIGVub3VnaCwgdGhhdCBp cywgc3RybGVuKGRzdCkgKyBzdHJubGVuKHNyYywgc3opICsgMS4NCj4+DQo+PiAgICAgICAg ICAgIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmU6DQo+Pg0K Pj4gICAgICAgICAgICAgICAgY2hhciAqDQo+PiAgICAgICAgICAgICAgICBzdHJuY2F0KGNo YXIgKnJlc3RyaWN0IGRzdCwgY29uc3QgY2hhciAqcmVzdHJpY3Qgc3JjLCBzaXplX3Qgc3op DQo+PiAgICAgICAgICAgICAgICB7DQo+PiAgICAgICAgICAgICAgICAgICAgaW50ICAgbGVu Ow0KPj4gICAgICAgICAgICAgICAgICAgIGNoYXIgICplbmQ7DQo+Pg0KPj4gICAgICAgICAg ICAgICAgICAgIGxlbiA9IHN0cm5sZW4oc3JjLCBzeik7DQo+PiAgICAgICAgICAgICAgICAg ICAgZW5kID0gZHN0ICsgc3RybGVuKGRzdCk7DQo+PiAgICAgICAgICAgICAgICAgICAgZW5k ID0gbWVtcGNweShlbmQsIHNyYywgbGVuKTsNCj4+ICAgICAgICAgICAgICAgICAgICAqZW5k ID0gJ1wwJzsNCj4+DQo+PiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRzdDsNCj4+ICAg ICAgICAgICAgICAgIH0NCj4+DQo+PiAgICAgUkVUVVJOIFZBTFVFDQo+PiAgICAgICAgICAg IHN0cm5jYXQoKSByZXR1cm5zIGRlc3QuDQo+Pg0KPj4gICAgIEFUVFJJQlVURVMNCj4+ICAg ICAgICAgICAgWy4uLl0NCj4+DQo+PiAgICAgU1RBTkRBUkRTDQo+PiAgICAgICAgICAgIFBP U0lYLjHigJAyMDAxLCBQT1NJWC4x4oCQMjAwOCwgQzg5LCBDOTksIFNWcjQsIDQuM0JTRC4N Cj4+DQo+PiAgICAgQ0FWRUFUUw0KPj4gICAgICAgICAgICBUaGUgIG5hbWUgb2YgdGhpcyBm dW5jdGlvbiBpcyBjb25mdXNpbmcuICBUaGlzIGZ1bmN0aW9uIGhhcyBubyByZeKAkA0KPj4g ICAgICAgICAgICBsYXRpb24gd2l0aCBzdHJuY3B5KDMpLg0KPj4NCj4+ICAgICAgICAgICAg SWYgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoLCB0aGUgYmVo YXZpb3IgaXMgdW7igJANCj4+ICAgICAgICAgICAgZGVmaW5lZC4gIFNlZSBfRk9SVElGWV9T T1VSQ0UgaW4gZmVhdHVyZV90ZXN0X21hY3Jvcyg3KS4NCj4+DQo+PiAgICAgQlVHUw0KPj4g ICAgICAgICAgICBUaGlzIGZ1bmN0aW9uICBjYW4gIGJlICB2ZXJ5ICBpbmVmZmljaWVudC4g ICBSZWFkICBhYm91dCAgU2hsZW1pZWwNCj4+ICAgICAgICAgICAgdGhlICAgICAgIHBhaW50 ZXIgICAgICDin6hodHRwczovL3d3dy5qb2Vsb25zb2Z0d2FyZS5jb20vMjAwMS8xMi8xMS8N Cj4+ICAgICAgICAgICAgYmFjay10by1iYXNpY3Mv4p+pLg0KPj4NCj4+ICAgICBFWEFNUExF Uw0KPj4gICAgICAgICAgICAjaW5jbHVkZSA8c3RkaW8uaD4NCj4+ICAgICAgICAgICAgI2lu Y2x1ZGUgPHN0ZGxpYi5oPg0KPj4gICAgICAgICAgICAjaW5jbHVkZSA8c3RyaW5nLmg+DQo+ Pg0KPj4gICAgICAgICAgICBpbnQNCj4+ICAgICAgICAgICAgbWFpbih2b2lkKQ0KPj4gICAg ICAgICAgICB7DQo+PiAgICAgICAgICAgICAgICBjaGFyICAgIGJ1ZltCVUZTSVpdOw0KPj4g ICAgICAgICAgICAgICAgc2l6ZV90ICBsZW47DQo+Pg0KPj4gICAgICAgICAgICAgICAgYnVm WzBdID0gJ1wwJzsgIC8vIFRoZXJl4oCZcyBubyDigJljcHnigJkgZnVuY3Rpb24gdG8gdGhp cyDigJljYXTigJkuDQo+PiAgICAgICAgICAgICAgICBzdHJuY2F0KGJ1ZiwgIkhlbGxvICIs IDYpOw0KPj4gICAgICAgICAgICAgICAgc3RybmNhdChidWYsICJ3b3JsZCIsIDQyKTsgIC8v IFBhZGRpbmcgbnVsbCBieXRlcyBpZ25vcmVkLg0KPj4gICAgICAgICAgICAgICAgc3RybmNh dChidWYsICIhIiwgMSk7DQo+PiAgICAgICAgICAgICAgICBsZW4gPSBzdHJsZW4oYnVmKTsN Cj4+ICAgICAgICAgICAgICAgIHByaW50ZigiW2xlbiA9ICV6dV06IDwlcz5cbiIsIGxlbiwg YnVmKTsNCj4+DQo+PiAgICAgICAgICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7DQo+PiAg ICAgICAgICAgIH0NCj4+DQo+PiAgICAgU0VFIEFMU08NCj4+ICAgICAgICAgICAgc3RyaW5n KDMpLCBzdHJpbmdfY29weSgzKQ0KPj4NCj4+ICAgICBMaW51eCBtYW7igJBwYWdlcyAodW5y ZWxlYXNlZCkgICAgICAoZGF0ZSkgICAgICAgICAgICAgICAgICAgICAgIHN0cm5jYXQoMykN Cj4+DQo+Pg0KPj4gQW5kIHdoZW4geW91IGNvbXBpbGUgdGhhdCwgeW91IGdldDoNCj4+DQo+ PiAkIGNjIC1XYWxsIC1XZXh0cmEgLi9zdHJuY2F0LmMNCj4+IC4vc3RybmNhdC5jOiBJbiBm dW5jdGlvbiDigJhtYWlu4oCZOg0KPj4gLi9zdHJuY2F0LmM6MTI6MTI6IHdhcm5pbmc6IOKA mHN0cm5jYXTigJkgc3BlY2lmaWVkIGJvdW5kIDYgZXF1YWxzIHNvdXJjZSBsZW5ndGgNCj4+ IFstV3N0cmluZ29wLW92ZXJmbG93PV0NCj4+ICAgICAgMTIgfCAgICAgICAgICAgIHN0cm5j YXQoYnVmLCAiSGVsbG8gIiwgNik7DQo+PiAgICAgICAgIHwgICAgICAgICAgICBefn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+DQo+PiAuL3N0cm5jYXQuYzoxNDoxMjogd2FybmluZzog4oCY c3RybmNhdOKAmSBzcGVjaWZpZWQgYm91bmQgMSBlcXVhbHMgc291cmNlIGxlbmd0aA0KPj4g Wy1Xc3RyaW5nb3Atb3ZlcmZsb3c9XQ0KPj4gICAgICAxNCB8ICAgICAgICAgICAgc3RybmNh dChidWYsICIhIiwgMSk7DQo+PiAgICAgICAgIHwgICAgICAgICAgICBefn5+fn5+fn5+fn5+ fn5+fn5+fg0KPj4NCj4+DQo+PiBTbywgd2hhdD8gIFdoZXJlJ3MgdGhlIHByb2JsZW0/ICBU aGlzIGZ1bmN0aW9uIGRvZXMgZXhhY3RseSB0aGF0OiAidGFrZSBhbg0KPj4gdW50ZXJtaW5h dGVkIGNoYXJhY3RlciBzZXF1ZW5jZSBhbmQgY2F0ZW5hdGUgaXQgdG8gYW4gZXhpc3Rpbmcg c3RyaW5nIi4gIENsYW5nDQo+PiBzZWVtcyB0byBiZSBmaW5lIHdpdGggdGhlIGNvZGUuDQo+ IA0KPiBTZWUgaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9 ODM0MDQgYW5kIHRoZQ0KPiBiYWNrZ3JvdW5kIG9mIHdoeSB0aGUgd2FybmluZyB3YXMgYWRk ZWQgaGVyZToNCj4gDQo+IGh0dHBzOi8vd3d3LnVzLWNlcnQuZ292L2JzaS9hcnRpY2xlcy9r bm93bGVkZ2UvY29kaW5nLXByYWN0aWNlcy9zdHJuY3B5LWFuZC1zdHJuY2F0Lg0KDQpUaGlz IGRvY3VtZW50IGlzIGJvZ3VzLCBzaW5jZSBpdCdzIHB1dGluZyBzdHJuY3B5KDMpIGFuZCBz dHJuY2F0KDMpIGluIHRoZSBzYW1lIA0Kc2Fjaywgd2hlbiB0aGV5J3JlIGluIHJlYWxpdHkg dHdvIGNvbXBsZXRlbHkgZGlmZmVyZW50IGJlYXN0cy4gIEknbGwgcXVvdGUgYmVsb3cgDQpz b21lIHBhcmFncmFwaHMgb2Ygc29tZSBuZXcgcGFnZSBJJ20gd3JpdGluZywgd2hpY2ggd2ls bCBzaG93IHdoeS4NCg0KVGhlIHJhdGlvbmFsZSBiZWhpbmQgR0NDJ3Mgd2FybmluZyBpcyBh bHNvIGZ1bmRhbWVudGFsbHkgd3JvbmcuICBNYXJ0aW4gd2FzIA0Kd3Jvbmcgd2hlbiBoZSBj bGFpbWVkIHRoYXQgdGhlIHJpZ2h0IGNhbGwgZm9yIHN0cm5jYXQoMykgaXMgdGhlIHJlbWFp bmluZyBzcGFjZSANCmluIHRoZSBkZXN0aW5hdGlvbi4NCg0KSSBhZG1pdCB0aGF0IEkgZGlk bid0IGtub3cgd2hhdCBzdHJuY2F0KDMpIHdhcyB1c2VmdWwgZm9yLCBhbmQgYmVsaWV2ZWQg dGhhdCBpdCANCndhcyBzaW1wbHkgYSBicm9rZW4tYnktZGVzaWduIGZ1bmN0aW9uIHVudGls IHZlcnkgcmVjZW50bHkgKHRoaXMgd2VlaywgbW9yZSBvciANCmxlc3MpLiAgQW5kIHRvIGJl IGhvbmVzdCwgSSBzdGlsbCBiZWxpZXZlIGl0J3MgYnJva2VuIGJ5IGRlc2lnbjsgaXQncyBq dXN0IHRoYXQgDQppdCBjYW4gYmUgcmVwdXJwb3NlZCBmb3IgYSByZWFzb25hYmxlIG5ldyBw dXJwb3NlICh3aGljaCBJIGZvdW5kIHdoaWxlIGRpZ2dpbmcgDQppbiBncm9mZidzIHNvdXJj ZSBjb2RlOyB0aGF0J3Mgd2h5IHRoZSBDQykuDQoNCg0KRmlyc3QgSSdsbCBzaG93IGFuIGV4 YW1wbGUgcHJvZ3JhbSB0aGF0IEkgYWRkZWQgdG8gdGhlIHN0cm5jYXQoMykgbWFudWFsIHBh Z2UgDQpsYXN0IHdlZWssIHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBncm9mZiBjb2RlIHRoYXQg dXNlZCBpdDoNCg0KDQogICAgICAgICNpbmNsdWRlIDxzdGRpby5oPg0KICAgICAgICAjaW5j bHVkZSA8c3RkbGliLmg+DQogICAgICAgICNpbmNsdWRlIDxzdHJpbmcuaD4NCg0KICAgICAg ICAjZGVmaW5lIG5pdGVtcyhhcnIpICAoc2l6ZW9mKChhcnIpKSAvIHNpemVvZigoYXJyKVsw XSkpDQoNCiAgICAgICAgaW50DQogICAgICAgIG1haW4odm9pZCkNCiAgICAgICAgew0KICAg ICAgICAgICAgY2hhciBwcmVbNF0gPSAicHJlLiI7DQogICAgICAgICAgICBjaGFyICpwb3N0 ID0gIi5wb3N0IjsNCiAgICAgICAgICAgIGNoYXIgKnNyYyA9ICJzb21lX2xvbmdfYm9keS5w b3N0IjsNCiAgICAgICAgICAgIGNoYXIgZGVzdFsxMDBdOw0KDQogICAgICAgICAgICBkZXN0 WzBdID0gJ1wwJzsNCiAgICAgICAgICAgIHN0cm5jYXQoZGVzdCwgcHJlLCBuaXRlbXMocHJl KSk7DQogICAgICAgICAgICBzdHJuY2F0KGRlc3QsIHNyYywgc3RybGVuKHNyYykgLSBzdHJs ZW4ocG9zdCkpOw0KDQogICAgICAgICAgICBwdXRzKGRlc3QpOyAgLy8gInByZS5zb21lX2xv bmdfYm9keSINCiAgICAgICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsNCiAgICAgICAgfQ0K DQoNCkFuZCBub3cgSSdsbCBxdW90ZSBzb21lIHRleHQgdGhhdCBJJ20gd3JpdGluZyBjdXJy ZW50bHkgZm9yIHRoZSBmdW5jdGlvbjoNCg0KDQogICAgTnVsbOKAkHBhZGRlZCBjaGFyYWN0 ZXIgc2VxdWVuY2VzDQogICAgICAgIEZvciBoaXN0b3JpYyByZWFzb25zLCBzb21lIHN0YW5k YXJkIEFQSXMsIHN1Y2ggYXMgdXRtcHgoNSksICB1c2UgIG51bGzigJANCiAgICAgICAgcGFk ZGVkICBjaGFyYWN0ZXIgIHNlcXVlbmNlcyBpbiBmaXhlZOKAkHdpZHRoIGJ1ZmZlcnMuICBU byBpbnRlcmZhY2Ugd2l0aA0KICAgICAgICB0aGVtLCBzcGVjaWFsaXplZCBmdW5jdGlvbnMg bmVlZCB0byBiZSB1c2VkLg0KDQogICAgICAgIFRvIGNvcHkgc3RyaW5ncyBpbnRvIHRoZW0s IHVzZSBzdHBuY3B5KDMpLg0KDQogICAgICAgIFRvIGNvcHkgZnJvbSBhbiB1bnRlcm1pbmF0 ZWQgc3RyaW5nIHdpdGhpbiBhIGZpeGVk4oCQd2lkdGggYnVmZmVyIGludG8gIGENCiAgICAg ICAgc3RyaW5nLCAgaWdub3JpbmcgIGFueSAgdHJhaWxpbmcgIG51bGwgIGJ5dGVzIGluIHRo ZSBzb3VyY2UgZml4ZWTigJB3aWR0aA0KICAgICAgICBidWZmZXIsIHlvdSBzaG91bGQgdXNl IHN0cm5jYXQoMykuDQoNCiAgICAgICAgWy4uLl0NCg0KICAgICAgICBzdHBuY3B5KDMpDQog ICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgaW5wdXQgc3RyaW5nICBp bnRvICBhICBkZXN0aW5hdGlvbg0KICAgICAgICAgICAgICAgbnVsbOKAkHBhZGRlZCBjaGFy YWN0ZXIgc2VxdWVuY2UgaW4gYSBmaXhlZOKAkHdpZHRoIGJ1ZmZlci4gIElmDQogICAgICAg ICAgICAgICB0aGUgIGRlc3RpbmF0aW9uICBidWZmZXIsICBsaW1pdGVkIGJ5IGl0cyBzaXpl LCBpc27igJl0IGxhcmdlDQogICAgICAgICAgICAgICBlbm91Z2ggdG8gaG9sZCB0aGUgY29w eSwgdGhlIHJlc3VsdGluZyAgY2hhcmFjdGVyICBzZXF1ZW5jZQ0KICAgICAgICAgICAgICAg aXMgIHRydW5jYXRlZC4gICBTaW5jZSAgaXQgY3JlYXRlcyBhIGNoYXJhY3RlciBzZXF1ZW5j ZSwgaXQNCiAgICAgICAgICAgICAgIGRvZXNu4oCZdCBuZWVkIHRvIHdyaXRlIGEgdGVybWlu YXRpbmcgbnVsbCBieXRlLiAgSXTigJlzIGltcG9z4oCQDQogICAgICAgICAgICAgICBzaWJs ZSB0byBkaXN0aW5ndWlzaCB0cnVuY2F0aW9uICBhZnRlciAgdGhlICBjYWxsLCAgZnJvbSAg YQ0KICAgICAgICAgICAgICAgY2hhcmFjdGVyICBzZXF1ZW5jZSAgdGhhdCBqdXN0IGZpdHMg dGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcjsNCiAgICAgICAgICAgICAgIHRydW5jYXRpb24gc2hv dWxkIGJlIGRldGVjdGVkIGZyb20gdGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2nigJANCiAgICAg ICAgICAgICAgIG5hbCBzdHJpbmcuDQoNCiAgICAgICAgc3RybmNweSgzKQ0KICAgICAgICAg ICAgICAgVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gIHN0cG5jcHkoMykgIGV4Y2Vw dCAgZm9yICB0aGUNCiAgICAgICAgICAgICAgIHVzZWxlc3MgcmV0dXJuIHZhbHVlLg0KDQog ICAgICAgICAgICAgICBzdHBuY3B5KDMpIGlzIGEgc2ltcGxlciBhbHRlcm5hdGl2ZSB0byB0 aGlzIGZ1bmN0aW9uLg0KDQogICAgICAgIFsuLi5dDQoNCiAgICAgICAgc3RybmNhdCgzKQ0K ICAgICAgICAgICAgICAgRG8gbm90IGNvbmZ1c2UgdGhpcyBmdW5jdGlvbiB3aXRoIHN0cm5j cHkoMyk7IHRoZXkgYXJlICBub3QNCiAgICAgICAgICAgICAgIHJlbGF0ZWQgYXQgYWxsLg0K DQogICAgICAgICAgICAgICBUaGlzICBmdW5jdGlvbiAgY2F0ZW5hdGVzIHRoZSBpbnB1dCBj aGFyYWN0ZXIgc2VxdWVuY2UgY29u4oCQDQogICAgICAgICAgICAgICB0YWluZWQgaW4gYSBu dWxs4oCQcGFkZGVkIHdpeGVk4oCQd2lkdGggYnVmZmVyLCBpbnRvIGEgZGVzdGluYeKAkA0K ICAgICAgICAgICAgICAgdGlvbiBzdHJpbmcuICBUaGUgcHJvZ3JhbW1lciBpcyByZXNwb25z aWJsZSBmb3IgIGFsbG9jYXRpbmcNCiAgICAgICAgICAgICAgIGEgYnVmZmVyIGxhcmdlIGVu b3VnaC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdXNlbGVzcy4NCg0KICAgICAgICAgICAgICAg enVzdHIyc3RwKDMpIGlzIGEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIHRoaXMgZnVuY3Rpb24u DQoNCiAgICAgICAgICAgICAgIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24g bWlnaHQgYmU6DQoNCiAgICAgICAgICAgICAgICAgICBjaGFyICoNCiAgICAgICAgICAgICAg ICAgICBzdHJuY2F0KGNoYXIgKnJlc3RyaWN0IGRzdCwgY29uc3QgY2hhciAqcmVzdHJpY3Qg c3JjLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN6KQ0KICAgICAgICAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgbGVuOw0KICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICAqZW5kOw0KDQogICAgICAgICAgICAgICAgICAgICAg IGxlbiA9IHN0cm5sZW4oc3JjLCBzeik7DQogICAgICAgICAgICAgICAgICAgICAgIGVuZCA9 IGRzdCArIHN0cmxlbihkc3QpOw0KICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBtZW1w Y3B5KGVuZCwgc3JjLCBsZW4pOw0KICAgICAgICAgICAgICAgICAgICAgICAqZW5kID0gJ1ww JzsNCg0KICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZHN0Ow0KICAgICAgICAgICAg ICAgICAgIH0NCg0KDQpDaGVlcnMsDQoNCkFsZXgNCg0KDQoNCj4gDQo+IFRoYW5rcywNCj4g QW5kcmV3IFBpbnNraQ0KPiANCj4+DQo+PiBDaGVlcnMsDQo+Pg0KPj4gQWxleA0KPj4NCj4+ DQo+PiAtLQ0KPj4gPGh0dHA6Ly93d3cuYWxlamFuZHJvLWNvbG9tYXIuZXMvPg0KDQotLSAN CjxodHRwOi8vd3d3LmFsZWphbmRyby1jb2xvbWFyLmVzLz4NCg== --------------DCqAi3hqATIlp2YFaNcVViaj-- --------------0Swy0a0zXYZFlZOO2VKIRQEe Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- iQIyBAEBCgAdFiEE6jqH8KTroDDkXfJAnowa+77/2zIFAmOaWL8ACgkQnowa+77/ 2zKHOA/3RFcM7LpSiGhypdXWGV8AodWH5yQn7vgPBDWVakxqYxbUhhdoBGHinLZL FUqT/nIMal2oyEIkUtGoqeDDUicgj0Hq94Zj/cJIhanDlbAZ/jA5LCy1PQOgShje VykCIjpHum/aEoMp67PHDkY6+G/DsFmtrWwNFdP/UTpJNA50OSCOsbsi7RmS+CWt 9PccYpSuIid7VydZqWhlchQVDiLnnbm8kUkii3Bia76GoZD2MJQH3XyF9GJsDd2P 7M0sdMiG9KQV+YF1CpelHcpo0Rh8BdxBfpfJ8QwRBBD2fB0ii85SrUGGWVctSOEX yPB1aMqC10zz/BFE0SRs5y5IuaYytL75xpeMQDtdI6GfMZ/+6C1XnSCRRRHV2/OW Y7QGJIJF/dKElBa8GpTijmVkJzl0Xle+MkHiS9cI0BCEv+EKykSn8z4oH5C5I3W7 Isf1Agkq64KD5LUQYVOxgKUD9pE0IbKcrdjkAWVIc8j9pQWnPz80u3uhWIe9c4ps 3Arpc6ERwvQLrLgVy1WD4Mu8hP2qkmMLyXQ8tyQ2iUWoREpK2lubdL8ljg4UsFXI TiB4KkkveaY06rZ+lGmzo1VerzMSRWAdgyn2k112KNZClmOeVJqt+vTjaRcxwL+G EcqDl2fC7dzIxm/nObSbOTMehFVlX+YWZ7/VA98ugrCy+eHrlw== =XvXD -----END PGP SIGNATURE----- --------------0Swy0a0zXYZFlZOO2VKIRQEe--