From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.cs.ucla.edu (mail.cs.ucla.edu [131.179.128.66]) by sourceware.org (Postfix) with ESMTPS id 8A26B3858D33 for ; Sun, 9 Apr 2023 15:29:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8A26B3858D33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=cs.ucla.edu Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=cs.ucla.edu Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id 9E38C3C09FA04; Sun, 9 Apr 2023 08:29:51 -0700 (PDT) Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id Hn5EESrwAlk2; Sun, 9 Apr 2023 08:29:51 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id 1973A3C09FA05; Sun, 9 Apr 2023 08:29:51 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu 1973A3C09FA05 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu; s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1681054191; bh=BfeAesQvnn5strSJB6aj72HAl75rI3FptQuMaCia+UI=; h=Message-ID:Date:MIME-Version:From:To; b=HTgs7BHUzSqfiVZ+wOQ+yB1Hcl0e08hGX3whHnBFwfKzVHzitVnIi9tH5Guw4MREg 83PP3flZ93FqSnSii+PO6ze2T6m5m1T6txo6nagCA3miFHbKm7lhozH+DrwaOLgb+z K6wxKW70woRx6NHTITL/I7CHb6zw6Qp+8QqAqN+STbSfa3lwNIlCMVJ+0OnHm3gMrV 0T+picSwUkkLQhEl9ncaC7iH71TqDJalSjPYk27yMyrFjnLGk/SgeoWj+691Q5HdBb B6uX82AL1X0MGzGC44k2LSnPre/nJTkDJCkxkhJToYR1Y5+Q+nroDwjCdPt4JV5tSz xcJhez7KDUafA== X-Virus-Scanned: amavisd-new at mail.cs.ucla.edu Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id eCMZA80YWIKd; Sun, 9 Apr 2023 08:29:51 -0700 (PDT) Received: from [192.168.1.9] (cpe-172-91-119-151.socal.res.rr.com [172.91.119.151]) by mail.cs.ucla.edu (Postfix) with ESMTPSA id E1C7F3C09FA04; Sun, 9 Apr 2023 08:29:50 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------8xZeuC0MvPb8RGN0dQSpXBbB" Message-ID: Date: Sun, 9 Apr 2023 08:29:50 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 Content-Language: en-US From: Paul Eggert To: Florian Weimer Cc: libc-alpha@sourceware.org References: <3e699937-2b0d-7218-3f97-ab54154806c1@cs.ucla.edu> Organization: UCLA Computer Science Department Subject: Re: [PATCH 1/2] Implement strlcpy and strlcat [BZ #178] In-Reply-To: <3e699937-2b0d-7218-3f97-ab54154806c1@cs.ucla.edu> X-Spam-Status: No, score=-9.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,GIT_PATCH_0,JMQ_SPF_NEUTRAL,NICE_REPLY_A,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 a multi-part message in MIME format. --------------8xZeuC0MvPb8RGN0dQSpXBbB Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 2023-04-08 15:08, Paul Eggert wrote: > the overlapping move constraint doesn't apply to the null > terminator. Oh, sorry, scratch that: it does apply, because of the 'restrict' constraints on the argument pointers. Hence (contrary to my previous assertion) PATCH 1/2's code does conform to draft POSIX. However, it's still worrisome that PATCH 1/2's behavior disagrees with OpenBSD's for some nonconforming calls. If the main point of the patch is compatibility, surely it is better to be compatible with existing practice, not merely with draft POSIX. Anyway, please ignore the documentation patch I sent yesterday in this thread, and look instead at the attached. This is the same patch, except with fixed wording under strlcpy and strlcat as to whether behavior is undefined. --------------8xZeuC0MvPb8RGN0dQSpXBbB Content-Type: text/x-patch; charset=UTF-8; name="0001-manual-improve-strlcpy-strlcat-doc.patch" Content-Disposition: attachment; filename="0001-manual-improve-strlcpy-strlcat-doc.patch" Content-Transfer-Encoding: base64 RnJvbSA5YjVlZWU2ZjA1ZDA3MjhjMGNmMDI2YjZjNWMyNzY4NTVmZGZjNjM3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBTYXQsIDggQXByIDIwMjMgMTM6NTQ6MzcgLTA3MDAKU3ViamVjdDogW1BBVENI IDEvMiBDT01NRU5UIHYyXSBtYW51YWw6IGltcHJvdmUgc3RybGNweS9zdHJsY2F0IGRvYwoK KiBORVdTOiBSZW1vdmUgZHVwbGljYXRlIGFubm91bmNlbWVudCBvZiBzdHJsY3B5L3N0cmxj YXQuCiogbWFudWFsL21haW50LnRleGkgKFNvdXJjZSBGb3J0aWZpY2F0aW9uKToKTWVudGlv biBzdHJsY3B5IGFuZCBzdHJsY2F0LgoqIG1hbnVhbC9zdHJpbmcudGV4aSAoVHJ1bmNhdGlu ZyBTdHJpbmdzKTogSW4gc3RybGNweS9zdHJsY2F0LAptZW50aW9uIHRoYXQgdGhlIGNhbGxl ciBzaG91bGQgZW5zdXJlIHJvb20gZm9yIHRoZSB0ZXJtaW5hdGluZwpudWxsIGJ5dGUsIGFz IGRyYWZ0IFBPU0lYIGRvZXMuICBEb24ndCBzYXkgdGhhdCB0aGUgYmVoYXZpb3IKaXMgdW5k ZWZpbmVkIG1lcmVseSBiZWNhdXNlIHRoZSBzaXplIGlzIHplcm8sIHNpbmNlIGl0J3Mgd2Vs bCBkZWZpbmVkLgpBY2N1cmF0ZWx5IGRlc2NyaWJlIHRoZSBjb25zdHJhaW50cyBpbXBvc2Vk IGJ5ICdyZXN0cmljdCcsCndoaWNoIGFyZSBzdHJpY3RlciB0aGFuIHRoZSBjb25zdHJhaW50 cyBpbXBvc2VkIGJ5IG5vdCBhbGxvd2luZwpvdmVybGFwcGluZyBjb3BpZXMuClVzZSB0aGUg c2FtZSBsYW5ndWFnZSBhYm91dCBzdHJpbmctcHJvY2Vzc2luZyBjaG9pY2UKYW5kIGFib3V0 IHBlcmZvcm1hbmNlIHRoYXQgd2UgYWxyZWFkeSB1c2UgZm9yIHN0cm5jcHkgYW5kIHN0cm5j YXQuCkF2b2lkIHVubmVjZXNzYXJpbHktZGlmZmVyZW50IHdvcmRpbmcgYmV0d2VlbiBzdHJs Y3B5IGFuZCBzdHJsY2F0CnRoYXQgbWlnaHQgY2F1c2UgdGhlIHJlYWRlciB0byBtaXN0YWtl bmx5IHRoaW5rIG9mIG90aGVyIGRpZmZlcmVuY2VzLgpNZW50aW9uIHRoYXQgc3RybGNweSBp cyBPKG1heChzaXplLCBzdHJsZW4oc3JjKSkpLCBub3QgTyhzaXplKS4KLS0tCiBORVdTICAg ICAgICAgICAgICAgfCAgNCArLS0KIG1hbnVhbC9tYWludC50ZXhpICB8ICA0ICsrKwogbWFu dWFsL3N0cmluZy50ZXhpIHwgNjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t LS0tLS0tLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCA0NyBpbnNlcnRpb25zKCspLCAyNCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9ORVdTIGIvTkVXUwppbmRleCA2MGI0MGZhYmNm Li5iMjFjNGMxMGFhIDEwMDY0NAotLS0gYS9ORVdTCisrKyBiL05FV1MKQEAgLTIyLDcgKzIy LDcgQEAgTWFqb3IgbmV3IGZlYXR1cmVzOgogKiBQUkliKiBhbmQgUFJJQiogbWFjcm9zIGZy b20gQzJYIGhhdmUgYmVlbiBhZGRlZCB0byA8aW50dHlwZXMuaD4uCiAKICogVGhlIHN0cmxj cHkgYW5kIHN0cmxjYXQgZnVuY3Rpb25zIGhhdmUgYmVlbiBhZGRlZC4gIFRoZXkgYXJlIGRl cml2ZWQKLSAgZnJvbSBPcGVuQlNELCBhbmQgYXJlIGV4cGVjdGVkIHRvIGJlIGFkZGVkIHRv IGEgZnV0dXJlIFBPU0lYIHZlcnNpb25zLgorICBmcm9tIE9wZW5CU0QsIGFuZCBhcmUgZXhw ZWN0ZWQgdG8gYmUgYWRkZWQgdG8gYSBmdXR1cmUgUE9TSVggdmVyc2lvbi4KIAogRGVwcmVj YXRlZCBhbmQgcmVtb3ZlZCBmZWF0dXJlcywgYW5kIG90aGVyIGNoYW5nZXMgYWZmZWN0aW5n IGNvbXBhdGliaWxpdHk6CiAKQEAgLTIyNiw4ICsyMjYsNiBAQCBNYWpvciBuZXcgZmVhdHVy ZXM6CiAKICAgVGhlIExvb25nQXJjaCBBQkkgaXMgNjQtYml0IGxpdHRsZS1lbmRpYW4uCiAK LSogVGhlIGZ1bmN0aW9ucyBzdHJsY3B5IGFuZCBzdHJsY2F0IGhhdmUgYmVlbiBhZGRlZC4K LQogRGVwcmVjYXRlZCBhbmQgcmVtb3ZlZCBmZWF0dXJlcywgYW5kIG90aGVyIGNoYW5nZXMg YWZmZWN0aW5nIGNvbXBhdGliaWxpdHk6CiAKICogU3VwcG9ydCBmb3IgcHJlbGluayB3aWxs IGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZTsgdGhpcyBpbmNsdWRlcwpkaWZmIC0t Z2l0IGEvbWFudWFsL21haW50LnRleGkgYi9tYW51YWwvbWFpbnQudGV4aQppbmRleCBhODQ0 MWUyMGI2Li4zYWQ0NjQ3Y2YzIDEwMDY0NAotLS0gYS9tYW51YWwvbWFpbnQudGV4aQorKysg Yi9tYW51YWwvbWFpbnQudGV4aQpAQCAtMzcxLDYgKzM3MSwxMCBAQCBUaGUgZm9sbG93aW5n IGZ1bmN0aW9ucyBhbmQgbWFjcm9zIGFyZSBmb3J0aWZpZWQgaW4gQHRoZWdsaWJje306CiAK IEBpdGVtIEBjb2Rle3N0cmNweX0KIAorQGl0ZW0gQGNvZGV7c3RybGNhdH0KKworQGl0ZW0g QGNvZGV7c3RybGNweX0KKwogQGl0ZW0gQGNvZGV7c3RybmNhdH0KIAogQGl0ZW0gQGNvZGV7 c3RybmNweX0KZGlmZiAtLWdpdCBhL21hbnVhbC9zdHJpbmcudGV4aSBiL21hbnVhbC9zdHJp bmcudGV4aQppbmRleCA1N2UzZjZhNjE5Li4zMWM5OGRmY2IzIDEwMDY0NAotLS0gYS9tYW51 YWwvc3RyaW5nLnRleGkKKysrIGIvbWFudWFsL3N0cmluZy50ZXhpCkBAIC03MjYsOCArNzI2 LDggQEAgVGhpcyBmdW5jdGlvbiBoYXMgdW5kZWZpbmVkIHJlc3VsdHMgaWYgdGhlIHN0cmlu Z3Mgb3ZlcmxhcC4KIEFzIG5vdGVkIGJlbG93LCB0aGlzIGZ1bmN0aW9uIGhhcyBzaWduaWZp Y2FudCBwZXJmb3JtYW5jZSBpc3N1ZXMuCiBAZW5kIGRlZnR5cGVmdW4KIAotUHJvZ3JhbW1l cnMgdXNpbmcgdGhlIEBjb2Rle3N0cmNhdH0gb3IgQGNvZGV7d2NzY2F0fSBmdW5jdGlvbiAo b3IgdGhlCi1AY29kZXtzdHJuY2F0fSBvciBAY29kZXt3Y3NuY2F0fSBmdW5jdGlvbnMgZGVm aW5lZCBpbgorUHJvZ3JhbW1lcnMgdXNpbmcgdGhlIEBjb2Rle3N0cmNhdH0gb3IgQGNvZGV7 d2NzY2F0fSBmdW5jdGlvbnMgKG9yIHRoZQorQGNvZGV7c3RybGNhdH0sIEBjb2Rle3N0cm5j YXR9IGFuZCBAY29kZXt3Y3NuY2F0fSBmdW5jdGlvbnMgZGVmaW5lZCBpbgogYSBsYXRlciBz ZWN0aW9uLCBmb3IgdGhhdCBtYXR0ZXIpCiBjYW4gZWFzaWx5IGJlIHJlY29nbml6ZWQgYXMg bGF6eSBhbmQgcmVja2xlc3MuICBJbiBhbG1vc3QgYWxsIHNpdHVhdGlvbnMKIHRoZSBsZW5n dGhzIG9mIHRoZSBwYXJ0aWNpcGF0aW5nIHN0cmluZ3MgYXJlIGtub3duIChpdCBiZXR0ZXIg c2hvdWxkIGJlCkBAIC04NDgsNyArODQ4LDggQEAgZnVuY3Rpb24uICBUaGUgZXhhbXBsZSB3 b3VsZCB3b3JrIGZvciB3aWRlIGNoYXJhY3RlcnMgdGhlIHNhbWUgd2F5LgogV2hlbmV2ZXIg YSBwcm9ncmFtbWVyIGZlZWxzIHRoZSBuZWVkIHRvIHVzZSBAY29kZXtzdHJjYXR9IHNoZSBv ciBoZQogc2hvdWxkIHRoaW5rIHR3aWNlIGFuZCBsb29rIHRocm91Z2ggdGhlIHByb2dyYW0g dG8gc2VlIHdoZXRoZXIgdGhlIGNvZGUgY2Fubm90CiBiZSByZXdyaXR0ZW4gdG8gdGFrZSBh ZHZhbnRhZ2Ugb2YgYWxyZWFkeSBjYWxjdWxhdGVkIHJlc3VsdHMuCi1UaGUgcmVsYXRlZCBm dW5jdGlvbnMgQGNvZGV7c3RybmNhdH0gYW5kIEBjb2Rle3djc2NhdH0KK1RoZSByZWxhdGVk IGZ1bmN0aW9ucyBAY29kZXtzdHJsY2F0fSwgQGNvZGV7c3RybmNhdH0sCitAY29kZXt3Y3Nj YXR9IGFuZCBAY29kZXt3Y3NuY2F0fQogYXJlIGFsbW9zdCBhbHdheXMgdW5uZWNlc3Nhcnks IHRvby4KIEFnYWluOiBpdCBpcyBhbG1vc3QgYWx3YXlzIHVubmVjZXNzYXJ5IHRvIHVzZSBm dW5jdGlvbnMgbGlrZSBAY29kZXtzdHJjYXR9LgogCkBAIC0xMDc5LDEzICsxMDgwLDE1IEBA IGlzc3Vlcy4gIEB4cmVme0NvbmNhdGVuYXRpbmcgU3RyaW5nc30uCiBAZGVmdHlwZWZ1biBz aXplX3Qgc3RybGNweSAoY2hhciAqcmVzdHJpY3QgQHZhcnt0b30sIGNvbnN0IGNoYXIgKnJl c3RyaWN0IEB2YXJ7ZnJvbX0sIHNpemVfdCBAdmFye3NpemV9KQogQHN0YW5kYXJkc3tCU0Qs IHN0cmluZy5ofQogQHNhZmV0eXtAcHJlbGlte31AbXRzYWZle31AYXNzYWZle31AYWNzYWZl e319Ci1UaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gQGNvZGV7c3RyY3B5fSwgYnV0IGNv cGllcyBhdCBtb3N0Ci1AdmFye3NpemV9IGJ5dGVzIGZyb20gdGhlIHN0cmluZyBAdmFye2Zy b219IGludG8gdGhlIGRlc3RpbmF0aW9uCi1hcnJheSBAdmFye3RvfSwgaW5jbHVkaW5nIGEg dGVybWluYXRpbmcgbnVsbCBieXRlLgorVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIHN0cmlu ZyBAdmFye2Zyb219IHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheQorQHZhcnt0b30sIGxpbWl0 aW5nIHRoZSByZXN1bHQncyBzaXplIChpbmNsdWRpbmcgdGhlIG51bGwgdGVybWluYXRvcikK K3RvIEB2YXJ7c2l6ZX0uICBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgdGhhdCBAdmFye3Np emV9IGluY2x1ZGVzIHJvb20KK2ZvciB0aGUgcmVzdWx0J3MgdGVybWluYXRpbmcgbnVsbCBi eXRlLgogCiBJZiBAdmFye3NpemV9IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRo ZSBzdHJpbmcgQHZhcntmcm9tfSwKLXRoaXMgZnVuY3Rpb24gY29waWVzIGFsbCBvZiB0aGUg c3RyaW5nIEB2YXJ7ZnJvbX0gdG8gdGhlIGRlc3RpbmF0aW9uCi1hcnJheSBAdmFye3RvfSwg aW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuICBMaWtlIG90aGVyCit0aGlz IGZ1bmN0aW9uIGNvcGllcyB0aGUgbm9uLW51bGwgYnl0ZXMgb2YgdGhlIHN0cmluZworQHZh cntmcm9tfSB0byB0aGUgZGVzdGluYXRpb24gYXJyYXkgQHZhcnt0b30sCithbmQgdGVybWlu YXRlcyB0aGUgY29weSB3aXRoIGEgbnVsbCBieXRlLiAgTGlrZSBvdGhlcgogc3RyaW5nIGZ1 bmN0aW9ucyBzdWNoIGFzIEBjb2Rle3N0cmNweX0sIGJ1dCB1bmxpa2UgQGNvZGV7c3RybmNw eX0sIGFueQogcmVtYWluaW5nIGJ5dGVzIGluIHRoZSBkZXN0aW5hdGlvbiBhcnJheSByZW1h aW4gdW5jaGFuZ2VkLgogCkBAIC0xMDk0LDEzICsxMDk3LDIxIEBAIElmIEB2YXJ7c2l6ZX0g aXMgbm9uemVybyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB0aGUgbGVuZ3RoIG9m IHRoZSBzdHJpbmcKIGJ5dGVzIHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheSBAdmFye3RvfSwg YW5kIHdyaXRlcyBhIHRlcm1pbmF0aW5nIG51bGwKIGJ5dGUgdG8gdGhlIGxhc3QgYnl0ZSBv ZiB0aGUgYXJyYXkuCiAKLVRoZSByZXR1cm4gdmFsdWUgQHZhcntyZXN1bHR9IG9mIEBjb2Rl e3N0cmxjcHl9IGlzIHRoZSBsZW5ndGggb2YgdGhlCi1zdHJpbmcgQHZhcntmcm9tfS4gIFRo aXMgbWVhbnMgdGhhdCBAc2FtcHtAdmFye3Jlc3VsdH0gPj0gQHZhcntzaXplfX0gaXMKLXRy dWUgd2hlbmV2ZXIgdHJ1bmNhdGlvbiBvY2N1cnMuCitUaGlzIGZ1bmN0aW9uIHJldHVybnMg dGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIEB2YXJ7ZnJvbX0uICBUaGlzIG1lYW5zCit0aGF0 IHRydW5jYXRpb24gb2NjdXJzIGlmIGFuZCBvbmx5IGlmIHRoZSByZXR1cm5lZCB2YWx1ZSBp cyBncmVhdGVyCit0aGFuIG9yIGVxdWFsIHRvIEB2YXJ7c2l6ZX0uCiAKLVRoZSBiZWhhdmlv ciBvZiBAY29kZXtzdHJsY3B5fSBpcyB1bmRlZmluZWQgaWYgQHZhcntzaXplfSBpcyB6ZXJv LCBvciBpZgotdGhlIHNvdXJjZSBzdHJpbmcgYW5kIHRoZSBmaXJzdCBAdmFye3NpemV9IGJ5 dGVzIG9mIHRoZSBkZXN0aW5hdGlvbgotYXJyYXkgb3ZlcmxhcC4KK1RoZSBiZWhhdmlvciBp cyB1bmRlZmluZWQgaWYgQHZhcnt0b30gb3IgQHZhcntmcm9tfSBpcyBhIG51bGwgcG9pbnRl ciwKK29yIGlmIHRoZSBkZXN0aW5hdGlvbiBhcnJheSdzIHNpemUgaXMgYm90aCBsZXNzIHRo YW4gQHZhcntzaXplfSBhbmQKK2xlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbGVuZ3RoIG9m IHRoZSBzdHJpbmcgQHZhcntmcm9tfSwgb3IgaWYKK3RoZSBzdHJpbmcgQHZhcntmcm9tfSBv dmVybGFwcyB0aGUgcmVzdWx0ICh0aGF0IGlzLCBpZiBAdmFye2Zyb219CitvdmVybGFwcyB0 aGUgZmlyc3QgQHNhbXB7TUlOIChAdmFye3NpemV9LCBzdHJsZW4gKEB2YXJ7ZnJvbX0pICsg MSl9CitieXRlcyBvZiB0aGUgdGhlIGRlc3RpbmF0aW9uIGFycmF5IEB2YXJ7dG99KS4KKwor QXMgbm90ZWQgYmVsb3csIHRoaXMgZnVuY3Rpb24gaXMgZ2VuZXJhbGx5IGEgcG9vciBjaG9p Y2UgZm9yCitwcm9jZXNzaW5nIHN0cmluZ3MuICBBbHNvLCB0aGlzIGZ1bmN0aW9uIGhhcyBh IHBlcmZvcm1hbmNlIGlzc3VlLAorYXMgaXRzIHRpbWUgY29zdCBpcyBwcm9wb3J0aW9uYWwg dG8gdGhlIGxlbmd0aCBvZiBAdmFye2Zyb219CitldmVuIHdoZW4gQHZhcntzaXplfSBpcyBz bWFsbC4KIAogVGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gT3BlbkJTRCAyLjQuCiBA ZW5kIGRlZnR5cGVmdW4KQEAgLTExMDksOCArMTEyMCw5IEBAIFRoaXMgZnVuY3Rpb24gaXMg ZGVyaXZlZCBmcm9tIE9wZW5CU0QgMi40LgogQHN0YW5kYXJkc3tCU0QsIHN0cmluZy5ofQog QHNhZmV0eXtAcHJlbGlte31AbXRzYWZle31AYXNzYWZle31AYWNzYWZle319CiBUaGlzIGZ1 bmN0aW9uIGFwcGVuZHMgdGhlIHN0cmluZyBAdmFye2Zyb219IHRvIHRoZQotc3RyaW5nIEB2 YXJ7dG99LCBsaW1pdGluZyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgcmVzdWx0IHN0cmluZyBh dAotQHZhcnt0b30gKGluY2x1ZGluZyB0aGUgbnVsbCB0ZXJtaW5hdG9yKSB0byBAdmFye3Np emV9Lgorc3RyaW5nIEB2YXJ7dG99LCBsaW1pdGluZyB0aGUgcmVzdWx0J3MgdG90YWwgc2l6 ZSAoaW5jbHVkaW5nIHRoZSBudWxsCit0ZXJtaW5hdG9yKSB0byBAdmFye3NpemV9LiAgVGhl IGNhbGxlciBzaG91bGQgZW5zdXJlIHRoYXQgQHZhcntzaXplfQoraW5jbHVkZXMgcm9vbSBm b3IgdGhlIHJlc3VsdCdzIHRlcm1pbmF0aW5nIG51bGwgYnl0ZS4KIAogVGhpcyBmdW5jdGlv biBjb3BpZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBvZiB0aGUgc3RyaW5nIEB2YXJ7ZnJvbX0g aW50bwogdGhlIGFycmF5IGF0IEB2YXJ7dG99IG9mIEB2YXJ7c2l6ZX0gYnl0ZXMsIHN0YXJ0 aW5nIGF0IHRoZSB0ZXJtaW5hdGluZwpAQCAtMTEyMCwxMiArMTEzMiwyMSBAQCBzdHJpbmcg d2lsbCBjb250YWluIGEgbnVsbCB0ZXJtaW5hdG9yLCBpdCBjYW4gYmUgdHJ1bmNhdGVkIChu b3QgYWxsCiBieXRlcyBpbiBAdmFye2Zyb219IG1heSBiZSBjb3BpZWQpLgogCiBUaGlzIGZ1 bmN0aW9uIHJldHVybnMgdGhlIHN1bSBvZiB0aGUgb3JpZ2luYWwgbGVuZ3RoIG9mIEB2YXJ7 dG99IGFuZAotdGhlIGxlbmd0aCBvZiBAdmFye2Zyb219LiAgVGhpcyBtZWFucyB0aGF0IHRy dW5jYXRpb24gb2NjdXJzIHVubGVzcwotdGhlIHJldHVybmVkIHZhbHVlIGlzIGxlc3MgdGhh biBAdmFye3NpemV9LgordGhlIGxlbmd0aCBvZiBAdmFye2Zyb219LiAgVGhpcyBtZWFucyB0 aGF0IHRydW5jYXRpb24gb2NjdXJzIGlmIGFuZAorb25seSBpZiB0aGUgcmV0dXJuZWQgdmFs dWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEB2YXJ7c2l6ZX0uCisKK1RoZSBiZWhh dmlvciBpcyB1bmRlZmluZWQgaWYgQHZhcnt0b30gb3IgQHZhcntmcm9tfSBpcyBhIG51bGwg cG9pbnRlciwKK29yIGlmIHRoZSBkZXN0aW5hdGlvbiBhcnJheSBkb2VzIG5vdCBjb250YWlu IGEgbnVsbCBieXRlIGluIGl0cyBmaXJzdAorQHZhcntzaXplfSBieXRlcywgb3IgaWYgdGhl IGRlc3RpbmF0aW9uIGFycmF5J3Mgc2l6ZSBpcyBib3RoIGxlc3MgdGhhbgorQHZhcntzaXpl fSBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzdW0gb2YgdGhlIGxlbmd0aHMgb2Yg dGhlCitzdHJpbmdzIEB2YXJ7ZnJvbX0gYW5kIEB2YXJ7dG99LCBvciBpZiB0aGUgc3RyaW5n IEB2YXJ7ZnJvbX0gb3ZlcmxhcHMKK3RoZSB0b3RhbCByZXN1bHQgKHRoYXQgaXMsIGlmIEB2 YXJ7ZnJvbX0gb3ZlcmxhcHMgdGhlIGZpcnN0IEBzYW1we01JTgorKEB2YXJ7c2l6ZX0sIHN0 cmxlbiAoQHZhcntmcm9tfSkgKyBzdHJsZW4gKEB2YXJ7dG99KSArIDEpfSBieXRlcyBvZgor dGhlIGRlc3RpbmF0aW9uIGFycmF5IEB2YXJ7dG99KS4KIAotVGhlIGJlaGF2aW9yIGlzIHVu ZGVmaW5lZCBpZiB0aGUgYXJyYXkgYXQgQHZhcnt0b30gZG9lcyBub3QgY29udGFpbiBhCi1u dWxsIGJ5dGUgaW4gaXRzIGZpcnN0IEB2YXJ7c2l6ZX0gYnl0ZXMsIG9yIGlmIHRoZSBzb3Vy Y2Ugc3RyaW5nIGFuZCB0aGUKLWZpcnN0IEB2YXJ7c2l6ZX0gYnl0ZXMgb2YgQHZhcnt0b30g b3ZlcmxhcC4KK0FzIG5vdGVkIGJlbG93LCB0aGlzIGZ1bmN0aW9uIGlzIGdlbmVyYWxseSBh IHBvb3IgY2hvaWNlIGZvcgorcHJvY2Vzc2luZyBzdHJpbmdzLiAgQWxzbywgdGhpcyBmdW5j dGlvbiBoYXMgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UKK2lzc3Vlcy4gIEB4cmVme0NvbmNh dGVuYXRpbmcgU3RyaW5nc30uCiAKIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIE9w ZW5CU0QgMi40LgogQGVuZCBkZWZ0eXBlZnVuCi0tIAoyLjM5LjIKCg== --------------8xZeuC0MvPb8RGN0dQSpXBbB--