Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vvEaa-009jhY-0W for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Feb 2026 13:06:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vvEaZ-0062os-0G for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Feb 2026 13:06:03 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vvEaY-0062ok-2F for pgsql-hackers@lists.postgresql.org; Wed, 25 Feb 2026 13:06:02 +0000 Received: from mail-ot1-x329.google.com ([2607:f8b0:4864:20::329]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vvEaU-00000001Dj4-3wap for pgsql-hackers@postgresql.org; Wed, 25 Feb 2026 13:06:02 +0000 Received: by mail-ot1-x329.google.com with SMTP id 46e09a7af769-7d18d02af68so4929770a34.2 for ; Wed, 25 Feb 2026 05:05:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772024758; cv=none; d=google.com; s=arc-20240605; b=QKD5eHCoMI7vBZaP8hjPPbmZUnrN+ABUUVPsoLSiM0zdaBRY16R8zUCj1Vckl+yl/H qf51UxBIz4IPwoR+NErkDTUl/h1grkSfSavy34Tfa4oHJdi8Tv5OhK5khVNL56JggfMi H2X6RwZJlUZvRj2GBnNU9hLs6t/hrdkETJ3nCmwzK6e6YuqpkVzZBcirYdUImVOLJLdc De9F2Yp3wLwoormaOtKAyDlsoz/c+yqag4VJwWVy5brgs6z/Uw85BowZutwFBkmT5G6r L/CSrRQ52mrlB7OWlFkVGKV1TABcgJ9cNqjHGt7W33I5VtbZUFYBvd52VunfZ9oLn7+f pLbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:mime-version:dkim-signature; bh=pSLk4bz2Ngm4enGVtHZgVaSCNZNNiKkc/jmDdF6ySBA=; fh=Tccc45CwlcCAjWMSlPu2uE3opNnkOZKIL99ph2vFnLI=; b=GeMk0VLgQ8g7eJueGFcVzRDmpr96y8BiQHLZkCmWOQHtHdFegNxpVWnQ3LBtyDBvwJ KzuA5UDB0ZqgFEfWnB+38ma8lKkAb0TtIXtYwfpfwQ2DN5heC6mnAYyS6y+e9NVwIhcQ Pa5am2nxA4kLMBArQe6GEOaLB/9C7Mi4MzhK4zpyWVAzyZ8gBkeeWZcKJKLRov+NWhE4 35ZGHOa3xddMqPVmty+1GwSRFmeaXhWzy2YdEZUalJCxxZzXNmseURfMuhpFx0hUrnzr F3+r4+BYdk4IWpCQhARHsdzuEp+/1++TC0hvkMovRC+tBliHY/eDd3XK+S/XvbrAr4Ir VAXQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tigerdata.com; s=google; t=1772024758; x=1772629558; darn=postgresql.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=pSLk4bz2Ngm4enGVtHZgVaSCNZNNiKkc/jmDdF6ySBA=; b=DkZlINcJHpn09o0WA/Acz91qwy84f3Rk2egIBxZUEjIhzg+oxiQLgK95JJRz1PAWi7 j3eVjkfgCTb9paAlRkS7MzQLKJBNBtvQLlJMk89Bl/U/L4dVG/Ww1XFaRnN4JxdL1Uhd 15hrV+cpci9mZssF89H0QJyYtPDqURcI70MBdrBm6se97VOJDCTfDZuDd82vPHzh+xCo cPkW1+xFwgxJYntP0tJV7Uq55vD4xa7oGprf9gPNJo+yoJB192sZDdJiTfe3LZ2maBl1 XkIBdC1/Rn0K5JgIjweWciPnz8auLNVLWG3/H4NUd5J22NwZy7i0kiIIepgcx+NS0N6D Porw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772024758; x=1772629558; h=cc:to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=pSLk4bz2Ngm4enGVtHZgVaSCNZNNiKkc/jmDdF6ySBA=; b=lVbhcdb1kVA0zOaExAX2GrG+ZlP+Ux/xfGF0fUbkP607/FOId/HgyT82DwO+e8Ir3F nWtz6qJOnasoPytn3lWVLiNli1fhPX/khIe1pQ2sTVM8MvCGyzVFMKqaBkpjrF8DdU/Q 7hx8NQx7fONurykKbmwZpvODXat05F77vMejR3mdz5gUr+gHPfvrw/DKfQiUIqC7lrH5 8D/QhkktGS6tZIB20mbZ/xUcRn+fvlKt1usXdOxNC0aT3edsw3TwXhlpdeWyNFK8UxrT 3AM7CcHNsS7KIpZqVDwR8JkzOgu0K7d25ZBkgKAG25O0D3fOtw3mWER6Jd/IMpUV7viA OJfw== X-Gm-Message-State: AOJu0YwpNgZImmFyiRq/koJxUtX22qcz+9mDDRL21Cl4u51svDhRZnQa 2vQxRmgeoQXzeBjfCt1lvB02cYPQQrXqxIt8DzpwWFwA31/aFOSmMY0DeXHGTQT/n18opiIsqRL CXODv18he7O/ueDE4MLooqCzrZmKxUcHSUetCzzKpaE2RFFca6d1rMPs= X-Gm-Gg: ATEYQzwQAxlaDSMhJE6jM80mV+92+WHKvcpRhPPRj561pD/kEQd7q1Mc0/a50mHZ0VL qvvwIykdFNiZWp+lBqym/eIXJppwkEG7LVIoNV6pFAWW6DY7LTmyYNXRl6h0mI4uvRssNeC2V68 pI/iHHbgEZ/QrWQGDJjReGcPcgQHEKCSKxvw50UcYS1HpoTmdVzRet0KUu/ud5P9KIiZ6oWvzZi QRGgAsXDz4qqqtfP9kRocDWPbXyN0hXHM1mztffoj53fO1+ANeT8K/aG9wQwDtJ4b3mOlm6OVp8 Wg8NPLuILCJ8st19cGi4jmy84xWxl6Pg/8JFrPUjvXntn+O9UZ3ubC/5U6tYspNB6RU= X-Received: by 2002:a05:6870:8881:b0:3eb:318f:36fb with SMTP id 586e51a60fabf-4157ac74804mr6368339fac.12.1772024757818; Wed, 25 Feb 2026 05:05:57 -0800 (PST) MIME-Version: 1.0 From: Aleksander Alekseev Date: Wed, 25 Feb 2026 16:05:46 +0300 X-Gm-Features: AaiRm51CrAwM0-ImWJpqkczUm4CEbs8utYk5cIaY8R6rttkya3JYv7k1w15t4Fc Message-ID: Subject: [PATCH] Simplify SortSupport implementation for macaddr To: PostgreSQL Development Cc: John Naylor Content-Type: multipart/mixed; boundary="000000000000394352064ba5aaad" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000394352064ba5aaad Content-Type: text/plain; charset="UTF-8" Hi, Since Datums are 64-bit values and MAC addresses have only 6 bytes, the abbreviated key contains the entire MAC address and is authoritative, as pointed out by John Naylor [1] This fact eliminates the need for cardinality estimation using HyperLogLog since macaddr_abbrev_convert() is dirt cheap and not lossy. There are no reasons to give up on abbreviation. Potentially we could go even further and pass MAC addresses by value rather by reference [2]. This would eliminate the need of abbreviation completely since SortSupport->comparator could just compare two Datums, as we do for Timestamps. This is a more invasive change though that deserves more discussion and thus not proposed here. [1]: https://postgr.es/m/CANWCAZYWdOEnoL_88VpMge1RtRpBz-VRCjdcu-eA4q3U6LvpDw%40mail.gmail.com [2]: https://postgre.es/m/CAJ7c6TM8up%3DYih8pRLPy4wHwLzHf7w22tQ80-8ZBm__E%3D8_5HA%40mail.gmail.com -- Best regards, Aleksander Alekseev --000000000000394352064ba5aaad Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-Simplify-SortSupport-implementation-for-macaddr.patch" Content-Disposition: attachment; filename="v1-0001-Simplify-SortSupport-implementation-for-macaddr.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm21rt6h0 RnJvbSA1NThjMDkwZDRlMTEyNzk0ZmIyNWNhMTZhYTgzODc0YzVkMmZhZmIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVrc2FuZGVyIEFsZWtzZWV2IDxhbGVrc2FuZGVyQHRpZ2Vy ZGF0YS5jb20+CkRhdGU6IFdlZCwgMjUgRmViIDIwMjYgMTQ6NDA6MjYgKzAzMDAKU3ViamVjdDog W1BBVENIIHYxXSBTaW1wbGlmeSBTb3J0U3VwcG9ydCBpbXBsZW1lbnRhdGlvbiBmb3IgbWFjYWRk cgoKU2luY2UgRGF0dW1zIGFyZSA2NC1iaXQgdmFsdWVzIGFuZCBNQUMgYWRkcmVzc2VzIGhhdmUg b25seSA2IGJ5dGVzLCB0aGUKYWJicmV2aWF0ZWQga2V5IGNvbnRhaW5zIHRoZSBlbnRpcmUgTUFD IGFkZHJlc3MgYW5kIGlzIGF1dGhvcml0YXRpdmUuIFRodXMKdGhlcmUgaXMgbm8gbmVlZCBmb3Ig Y2FyZGluYWxpdHkgZXN0aW1hdGlvbiB1c2luZyBIeXBlckxvZ0xvZy4KCkF1dGhvcjogQWxla3Nh bmRlciBBbGVrc2VldiA8YWxla3NhbmRlckB0aWdlcmRhdGEuY29tPgpTdWdnZXN0ZWQtYnk6IEpv aG4gTmF5bG9yIDxqb2huY25heWxvcmxzQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFRPRE8gRklY TUUKRGlzY3Vzc2lvbjogVE9ETyBGSVhNRQotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9tYWMu YyB8IDEwMCArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFu Z2VkLCA1IGluc2VydGlvbnMoKyksIDk1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9tYWMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tYWMuYwppbmRl eCBmMTQ2NzVkZWE0MC4uNDMzZGNlMDE1YzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9tYWMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbWFjLmMKQEAgLTE0LDExICsx NCw5IEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4u aCIKLSNpbmNsdWRlICJsaWIvaHlwZXJsb2dsb2cuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1h dC5oIgogI2luY2x1ZGUgInBvcnQvcGdfYnN3YXAuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdycHJv dG9zLmgiCi0jaW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5ldC5oIgog I2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCiAKQEAgLTMzLDE1ICszMSw2IEBACiAjZGVm aW5lIGxvYml0cyhhZGRyKSBcCiAgICgodW5zaWduZWQgbG9uZykoKChhZGRyKS0+ZDw8MTYpfCgo YWRkciktPmU8PDgpfCgoYWRkciktPmYpKSkKIAotLyogc29ydHN1cHBvcnQgZm9yIG1hY2FkZHIg Ki8KLXR5cGVkZWYgc3RydWN0Ci17Ci0JaW50NjQJCWlucHV0X2NvdW50OwkvKiBudW1iZXIgb2Yg bm9uLW51bGwgdmFsdWVzIHNlZW4gKi8KLQlib29sCQllc3RpbWF0aW5nOwkJLyogdHJ1ZSBpZiBl c3RpbWF0aW5nIGNhcmRpbmFsaXR5ICovCi0KLQloeXBlckxvZ0xvZ1N0YXRlIGFiYnJfY2FyZDsg LyogY2FyZGluYWxpdHkgZXN0aW1hdG9yICovCi19IG1hY2FkZHJfc29ydHN1cHBvcnRfc3RhdGU7 Ci0KIHN0YXRpYyBpbnQJbWFjYWRkcl9jbXBfaW50ZXJuYWwobWFjYWRkciAqYTEsIG1hY2FkZHIg KmEyKTsKIHN0YXRpYyBpbnQJbWFjYWRkcl9mYXN0X2NtcChEYXR1bSB4LCBEYXR1bSB5LCBTb3J0 U3VwcG9ydCBzc3VwKTsKIHN0YXRpYyBib29sIG1hY2FkZHJfYWJicmV2X2Fib3J0KGludCBtZW10 dXBjb3VudCwgU29ydFN1cHBvcnQgc3N1cCk7CkBAIC0zNjksMjQgKzM1OCwxMCBAQCBtYWNhZGRy X3NvcnRzdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlpZiAoc3N1cC0+YWJicmV2aWF0ZSkK IAl7Ci0JCW1hY2FkZHJfc29ydHN1cHBvcnRfc3RhdGUgKnVzczsKLQkJTWVtb3J5Q29udGV4dCBv bGRjb250ZXh0OwotCi0JCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3N1cC0+ c3N1cF9jeHQpOwotCi0JCXVzcyA9IHBhbGxvY19vYmplY3QobWFjYWRkcl9zb3J0c3VwcG9ydF9z dGF0ZSk7Ci0JCXVzcy0+aW5wdXRfY291bnQgPSAwOwotCQl1c3MtPmVzdGltYXRpbmcgPSB0cnVl OwotCQlpbml0SHlwZXJMb2dMb2coJnVzcy0+YWJicl9jYXJkLCAxMCk7Ci0KLQkJc3N1cC0+c3N1 cF9leHRyYSA9IHVzczsKLQogCQlzc3VwLT5jb21wYXJhdG9yID0gc3N1cF9kYXR1bV91bnNpZ25l ZF9jbXA7CiAJCXNzdXAtPmFiYnJldl9jb252ZXJ0ZXIgPSBtYWNhZGRyX2FiYnJldl9jb252ZXJ0 OwogCQlzc3VwLT5hYmJyZXZfYWJvcnQgPSBtYWNhZGRyX2FiYnJldl9hYm9ydDsKIAkJc3N1cC0+ YWJicmV2X2Z1bGxfY29tcGFyYXRvciA9IG1hY2FkZHJfZmFzdF9jbXA7Ci0KLQkJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogCX0KIAogCVBHX1JFVFVSTl9WT0lEKCk7CkBAIC00 MDYsNjEgKzM4MSwxMiBAQCBtYWNhZGRyX2Zhc3RfY21wKERhdHVtIHgsIERhdHVtIHksIFNvcnRT dXBwb3J0IHNzdXApCiB9CiAKIC8qCi0gKiBDYWxsYmFjayBmb3IgZXN0aW1hdGluZyBlZmZlY3Rp dmVuZXNzIG9mIGFiYnJldmlhdGVkIGtleSBvcHRpbWl6YXRpb24uCi0gKgotICogV2UgcGF5IG5v IGF0dGVudGlvbiB0byB0aGUgY2FyZGluYWxpdHkgb2YgdGhlIG5vbi1hYmJyZXZpYXRlZCBkYXRh LCBiZWNhdXNlCi0gKiB0aGVyZSBpcyBubyBlcXVhbGl0eSBmYXN0LXBhdGggd2l0aGluIGF1dGhv cml0YXRpdmUgbWFjYWRkciBjb21wYXJhdG9yLgorICogQWJicmV2aWF0aW9uIGlzIG5ldmVyIGFi b3J0ZWQgZm9yIG1hY2FkZHIgYmVjYXVzZSB0aGUgNi1ieXRlIE1BQyBhZGRyZXNzCisgKiBmaXRz IGVudGlyZWx5IHdpdGhpbiBhIDY0LWJpdCBEYXR1bSwgbWFraW5nIHRoZSBhYmJyZXZpYXRlZCBr ZXkgYXV0aG9yaXRhdGl2ZS4KICAqLwogc3RhdGljIGJvb2wKIG1hY2FkZHJfYWJicmV2X2Fib3J0 KGludCBtZW10dXBjb3VudCwgU29ydFN1cHBvcnQgc3N1cCkKIHsKLQltYWNhZGRyX3NvcnRzdXBw b3J0X3N0YXRlICp1c3MgPSBzc3VwLT5zc3VwX2V4dHJhOwotCWRvdWJsZQkJYWJicl9jYXJkOwot Ci0JaWYgKG1lbXR1cGNvdW50IDwgMTAwMDAgfHwgdXNzLT5pbnB1dF9jb3VudCA8IDEwMDAwIHx8 ICF1c3MtPmVzdGltYXRpbmcpCi0JCXJldHVybiBmYWxzZTsKLQotCWFiYnJfY2FyZCA9IGVzdGlt YXRlSHlwZXJMb2dMb2coJnVzcy0+YWJicl9jYXJkKTsKLQotCS8qCi0JICogSWYgd2UgaGF2ZSA+ MTAwayBkaXN0aW5jdCB2YWx1ZXMsIHRoZW4gZXZlbiBpZiB3ZSB3ZXJlIHNvcnRpbmcgbWFueQot CSAqIGJpbGxpb24gcm93cyB3ZSdkIGxpa2VseSBzdGlsbCBicmVhayBldmVuLCBhbmQgdGhlIHBl bmFsdHkgb2YgdW5kb2luZwotCSAqIHRoYXQgbWFueSByb3dzIG9mIGFiYnJldnMgd291bGQgcHJv YmFibHkgbm90IGJlIHdvcnRoIGl0LiBBdCB0aGlzIHBvaW50Ci0JICogd2Ugc3RvcCBjb3VudGlu ZyBiZWNhdXNlIHdlIGtub3cgdGhhdCB3ZSdyZSBub3cgZnVsbHkgY29tbWl0dGVkLgotCSAqLwot CWlmIChhYmJyX2NhcmQgPiAxMDAwMDAuMCkKLQl7Ci0JCWlmICh0cmFjZV9zb3J0KQotCQkJZWxv ZyhMT0csCi0JCQkJICJtYWNhZGRyX2FiYnJldjogZXN0aW1hdGlvbiBlbmRzIGF0IGNhcmRpbmFs aXR5ICVmIgotCQkJCSAiIGFmdGVyICIgSU5UNjRfRk9STUFUICIgdmFsdWVzICglZCByb3dzKSIs Ci0JCQkJIGFiYnJfY2FyZCwgdXNzLT5pbnB1dF9jb3VudCwgbWVtdHVwY291bnQpOwotCQl1c3Mt PmVzdGltYXRpbmcgPSBmYWxzZTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qCi0JICogVGFy Z2V0IG1pbmltdW0gY2FyZGluYWxpdHkgaXMgMSBwZXIgfjJrIG9mIG5vbi1udWxsIGlucHV0cy4g MC41IHJvdwotCSAqIGZ1ZGdlIGZhY3RvciBhbGxvd3MgdXMgdG8gYWJvcnQgZWFybGllciBvbiBn ZW51aW5lbHkgcGF0aG9sb2dpY2FsIGRhdGEKLQkgKiB3aGVyZSB3ZSd2ZSBoYWQgZXhhY3RseSBv bmUgYWJicmV2aWF0ZWQgdmFsdWUgaW4gdGhlIGZpcnN0IDJrCi0JICogKG5vbi1udWxsKSByb3dz LgotCSAqLwotCWlmIChhYmJyX2NhcmQgPCB1c3MtPmlucHV0X2NvdW50IC8gMjAwMC4wICsgMC41 KQotCXsKLQkJaWYgKHRyYWNlX3NvcnQpCi0JCQllbG9nKExPRywKLQkJCQkgIm1hY2FkZHJfYWJi cmV2OiBhYm9ydGluZyBhYmJyZXZpYXRpb24gYXQgY2FyZGluYWxpdHkgJWYiCi0JCQkJICIgYmVs b3cgdGhyZXNob2xkICVmIGFmdGVyICIgSU5UNjRfRk9STUFUICIgdmFsdWVzICglZCByb3dzKSIs Ci0JCQkJIGFiYnJfY2FyZCwgdXNzLT5pbnB1dF9jb3VudCAvIDIwMDAuMCArIDAuNSwgdXNzLT5p bnB1dF9jb3VudCwKLQkJCQkgbWVtdHVwY291bnQpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlp ZiAodHJhY2Vfc29ydCkKLQkJZWxvZyhMT0csCi0JCQkgIm1hY2FkZHJfYWJicmV2OiBjYXJkaW5h bGl0eSAlZiBhZnRlciAiIElOVDY0X0ZPUk1BVAotCQkJICIgdmFsdWVzICglZCByb3dzKSIsIGFi YnJfY2FyZCwgdXNzLT5pbnB1dF9jb3VudCwgbWVtdHVwY291bnQpOwotCiAJcmV0dXJuIGZhbHNl OwogfQogCkBAIC00NjksMTQgKzM5NSwxMyBAQCBtYWNhZGRyX2FiYnJldl9hYm9ydChpbnQgbWVt dHVwY291bnQsIFNvcnRTdXBwb3J0IHNzdXApCiAgKiB0byBhYmJyZXZpYXRlZCBrZXkgcmVwcmVz ZW50YXRpb24uCiAgKgogICogUGFja3MgdGhlIGJ5dGVzIG9mIGEgNi1ieXRlIE1BQyBhZGRyZXNz IGludG8gYSBEYXR1bSBhbmQgdHJlYXRzIGl0IGFzIGFuCi0gKiB1bnNpZ25lZCBpbnRlZ2VyIGZv ciBwdXJwb3NlcyBvZiBjb21wYXJpc29uLiBPbiBhIDY0LWJpdCBtYWNoaW5lLCB0aGVyZQotICog d2lsbCBiZSB0d28gemVyb2VkIGJ5dGVzIG9mIHBhZGRpbmcuIFRoZSBpbnRlZ2VyIGlzIGNvbnZl cnRlZCB0byBuYXRpdmUKLSAqIGVuZGlhbm5lc3MgdG8gZmFjaWxpdGF0ZSBlYXN5IGNvbXBhcmlz b24uCisgKiB1bnNpZ25lZCBpbnRlZ2VyIGZvciBwdXJwb3NlcyBvZiBjb21wYXJpc29uLiBUaGVy ZSB3aWxsIGJlIHR3byB6ZXJvZWQgYnl0ZXMKKyAqIG9mIHBhZGRpbmcuIFRoZSBpbnRlZ2VyIGlz IGNvbnZlcnRlZCB0byBuYXRpdmUgZW5kaWFubmVzcyB0byBmYWNpbGl0YXRlCisgKiBlYXN5IGNv bXBhcmlzb24uCiAgKi8KIHN0YXRpYyBEYXR1bQogbWFjYWRkcl9hYmJyZXZfY29udmVydChEYXR1 bSBvcmlnaW5hbCwgU29ydFN1cHBvcnQgc3N1cCkKIHsKLQltYWNhZGRyX3NvcnRzdXBwb3J0X3N0 YXRlICp1c3MgPSBzc3VwLT5zc3VwX2V4dHJhOwogCW1hY2FkZHIgICAgKmF1dGhvcml0YXRpdmUg PSBEYXR1bUdldE1hY2FkZHJQKG9yaWdpbmFsKTsKIAlEYXR1bQkJcmVzOwogCkBAIC00ODksMjEg KzQxNCw2IEBAIG1hY2FkZHJfYWJicmV2X2NvbnZlcnQoRGF0dW0gb3JpZ2luYWwsIFNvcnRTdXBw b3J0IHNzdXApCiAJCQkJCSAiRGF0dW0gaXMgdG9vIHNtYWxsIGZvciBtYWNhZGRyIik7CiAJbWVt c2V0KCZyZXMsIDAsIHNpemVvZihyZXMpKTsKIAltZW1jcHkoJnJlcywgYXV0aG9yaXRhdGl2ZSwg c2l6ZW9mKG1hY2FkZHIpKTsKLQl1c3MtPmlucHV0X2NvdW50ICs9IDE7Ci0KLQkvKgotCSAqIENh cmRpbmFsaXR5IGVzdGltYXRpb24uIFRoZSBlc3RpbWF0ZSB1c2VzIHVpbnQzMiwgc28gWE9SIHRo ZSB0d28gMzItYml0Ci0JICogaGFsdmVzIHRvZ2V0aGVyIHRvIHByb2R1Y2Ugc2xpZ2h0bHkgbW9y ZSBlbnRyb3B5LiBUaGUgdHdvIHplcm9lZCBieXRlcwotCSAqIHdvbid0IGhhdmUgYW55IHByYWN0 aWNhbCBpbXBhY3Qgb24gdGhpcyBvcGVyYXRpb24uCi0JICovCi0JaWYgKHVzcy0+ZXN0aW1hdGlu ZykKLQl7Ci0JCXVpbnQzMgkJdG1wOwotCi0JCXRtcCA9IERhdHVtR2V0VUludDMyKHJlcykgXiAo dWludDMyKSAoRGF0dW1HZXRVSW50NjQocmVzKSA+PiAzMik7Ci0KLQkJYWRkSHlwZXJMb2dMb2co JnVzcy0+YWJicl9jYXJkLCBEYXR1bUdldFVJbnQzMihoYXNoX3VpbnQzMih0bXApKSk7Ci0JfQog CiAJLyoKIAkgKiBCeXRlc3dhcCBvbiBsaXR0bGUtZW5kaWFuIG1hY2hpbmVzLgotLSAKMi40My4w Cgo= --000000000000394352064ba5aaad--