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.94.2) (envelope-from ) id 1u0p8r-008b9A-Ho for pgsql-hackers@arkaria.postgresql.org; Fri, 04 Apr 2025 22:04:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1u0p8q-005V47-44 for pgsql-hackers@arkaria.postgresql.org; Fri, 04 Apr 2025 22:04:00 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u0p8p-005V3y-IQ for pgsql-hackers@lists.postgresql.org; Fri, 04 Apr 2025 22:03:59 +0000 Received: from mail-pf1-x441.google.com ([2607:f8b0:4864:20::441]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1u0p8n-002zcb-2b for pgsql-hackers@lists.postgresql.org; Fri, 04 Apr 2025 22:03:58 +0000 Received: by mail-pf1-x441.google.com with SMTP id d2e1a72fcca58-736c1cf75e4so2089203b3a.2 for ; Fri, 04 Apr 2025 15:03:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743804236; x=1744409036; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=u/wt5Un5BMeU+JMMRTMgliYsKRVnEJXvk0qQzY0LtWY=; b=DVheeA7l3RYFX7fR3aoDc7EdDeoNCmKI6Yf5OjehkFRooASlIskiCmDiL0lZovbZGE pwmeV5haMZ8CM7r6glZpUM2lI8DyEAP+vbX/cf682FQeP2ifz5ge4WpM7UOGXxeGWqoU eZfU+htYgI1NzqCPzbUeAlNpQvjIGXZjsopkV1TIEHp+HS9t5ZKuWzT0umInN1YxdeFl ir3Yc0/OLF2L6vdBx2tE0bREoCj3nb9Tw7WxBB9+bO8zEN75C4CDbmvDjAxZopilp8YV BGk/Mk7TbD6aoK2qR5bdEvfOhcEk8OpMwms+uD0YmJTVaKnj1XA+eBWEbOUmqbiZCwUo sUxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743804236; x=1744409036; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=u/wt5Un5BMeU+JMMRTMgliYsKRVnEJXvk0qQzY0LtWY=; b=H+FAx7qYElr5ba8QnHFBBW8+KI+vSAWCzQ68YVLC5UCFpNKebsxksrAPgInlZvcASn RWcy9DgzeOMbow2XU3c845rvoGR43QrXYm6wlLzZwHPz8t3GVhNtTIADApLEUtr00LfJ sbm3MAFRKczT7bSO3louoKlsLTDmilYiSh0ir5AH5kErZ+K6xthqoG01c/yYwj0ATbCx DTnYdeQEMtNfTk6OjRZgu5FMCpuPsNXCMJJ0yLBFGKUPYa5apS0v4AV6r6zy7M30mPPf HHpQCc2ymAfw9GJjHtPhMm6CpITQL9sANsCxWPeCNNYIGppAUn+oWu3ElkCDio5KM3MY d8AA== X-Gm-Message-State: AOJu0YxScuGuobvJNcphA7OvzOqlK02ddRGefQApeH+/WBz/PLUKVyb6 MuSY+B6hR6K4Tf8V7l3NPkt9yCyoD2wX85/+0RAFxjS4vCsdoj8gvazt9QxhHZCyE6O2FcqT5hh xneivq/w3Cb7eut9N+1njnv4D/bJbuKPN X-Gm-Gg: ASbGncuf2693Pn2wod23biU8Hm4Ki8SP48lhlGtcd9dw/ORav2VF1C1d9sXzYsVD39h WDCC+c9KiJ5cdcqYGqicbNcCBt0pNbV7fLI/w1OWJRMIgzpbPzKqrQQC2MhfnZvMa45OCj1x9v2 BEs8esTlMn0mBgLto6kuYxQGtq6HQ= X-Google-Smtp-Source: AGHT+IEKBzPOaXKdsu7YOnr8qUuXP77FV/14JQ9zuxr/tfoLiMb7dbP7z56aRWZnxms9NelGTYyaVloF8QqUcev7o5w= X-Received: by 2002:a17:90b:2e4f:b0:2ef:67c2:4030 with SMTP id 98e67ed59e1d1-306a62134b3mr4761969a91.27.1743804236072; Fri, 04 Apr 2025 15:03:56 -0700 (PDT) MIME-Version: 1.0 From: Matthew Sterrett Date: Fri, 4 Apr 2025 15:03:43 -0700 X-Gm-Features: ATxdqUF8NknEmax4E7gZTFJnc6tk37NptrtRbiR1vQo8Da40lrOHVWZt6-CQIZs Message-ID: Subject: Proposal for enabling auto-vectorization for checksum calculations To: pgsql-hackers@lists.postgresql.org Cc: "Devulapalli, Raghuveer" , "Shankaran, Akash" , Matthew Sterrett Content-Type: multipart/mixed; boundary="0000000000000cadd70631fb10ff" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000cadd70631fb10ff Content-Type: text/plain; charset="UTF-8" Hello, This patch enables more compiler autovectorization for the checksum calculations. This code is particularly well suited for autovectorization, so just adding pg_attribute_target and some simple dynamic dispatch logic we can get improved vectorization. This gives about a 2x speedup in a synthetic benchmark for pg_checksum, which is also included as a seperate patch file. Additionally, another 2x performance increase in the synthetic benchmark with AVX2 can be obtained if N_SUMS was changed to 64. However, this would change the results of the checksum. This isn't included in this patch, but I think it is worth considering for the future One additional factor, without explicitly passing some optimization flag like -O2 the makefile build won't autovectorize any of the code. However, the meson based build does this automatically. --0000000000000cadd70631fb10ff Content-Type: application/octet-stream; name="v1-0001-Enable-autovectorizing-pg_checksum_block.patch" Content-Disposition: attachment; filename="v1-0001-Enable-autovectorizing-pg_checksum_block.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m93bxavc0 RnJvbSBlNDg1MTEwMTkyYzIwOGJlY2FkMDE1M2U1MWEzOTUxNGNhY2UxMzc3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGV3IFN0ZXJyZXR0IDxtYXR0aGV3LnN0ZXJyZXR0QGlu dGVsLmNvbT4KRGF0ZTogRnJpLCA3IE1hciAyMDI1IDExOjMzOjQ1IC0wODAwClN1YmplY3Q6IFtQ QVRDSCB2MSAxLzJdIEVuYWJsZSBhdXRvdmVjdG9yaXppbmcgcGdfY2hlY2tzdW1fYmxvY2sKCi0t LQogY29uZmlnL2MtY29tcGlsZXIubTQgICAgICAgICAgICAgICAgfCAgMzEgKysrKysrCiBjb25m aWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1MiArKysrKysrKysrCiBjb25maWd1 cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOSArKwogbWVzb24uYnVpbGQgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgMjggKysrKysrCiBzcmMvaW5jbHVkZS9wZ19jb25maWcuaC5p biAgICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2NoZWNrc3VtX2ltcGwuaCB8 IDE1MCArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCiA2IGZpbGVzIGNoYW5nZWQsIDI1MCBp bnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb25maWcvYy1jb21w aWxlci5tNCBiL2NvbmZpZy9jLWNvbXBpbGVyLm00CmluZGV4IDg1MzRjYzU0YzEuLjE0M2E4YTQw ZGQgMTAwNjQ0Ci0tLSBhL2NvbmZpZy9jLWNvbXBpbGVyLm00CisrKyBiL2NvbmZpZy9jLWNvbXBp bGVyLm00CkBAIC02NzAsNiArNjcwLDM3IEBAIGZpCiB1bmRlZmluZShbQWNfY2FjaGV2YXJdKWRu bAogXSkjIFBHQUNfWFNBVkVfSU5UUklOU0lDUwogCisjIFBHQUNfQVZYMl9TVVBQT1JUCisjIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGlmIHRoZSBjb21waWxlciBzdXBw b3J0cyBBVlgyIGluIGF0dHJpYnV0ZSgodGFyZ2V0KSkKKyMgYW5kIHVzaW5nIEFWWDIgaW50cmlu c2ljcyBpbiB0aG9zZSBmdW5jdGlvbnMKKyMKKyMgSWYgdGhlIGludHJpbnNpY3MgYXJlIHN1cHBv cnRlZCwgc2V0cyBwZ2FjX2F2eDJfc3VwcG9ydC4KK0FDX0RFRlVOKFtQR0FDX0FWWDJfU1VQUE9S VF0sCitbZGVmaW5lKFtBY19jYWNoZXZhcl0sIFtBU19UUl9TSChbcGdhY19jdl9hdngyX3N1cHBv cnRdKV0pZG5sCitBQ19DQUNIRV9DSEVDSyhbZm9yIEFWWDIgc3VwcG9ydF0sIFtBY19jYWNoZXZh cl0sCitbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPGltbWludHJp bi5oPgorICAgICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAgICAjaWYgZGVmaW5lZChfX2hhc19hdHRy aWJ1dGUpICYmIF9faGFzX2F0dHJpYnV0ZSAodGFyZ2V0KQorICAgIF9fYXR0cmlidXRlX18oKHRh cmdldCgiYXZ4MiIpKSkKKyAgICAjZW5kaWYKKyAgICBzdGF0aWMgaW50IGF2eDJfdGVzdCh2b2lk KQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgYnVmQDw6QHNpemVvZihfX20yNTZpKUA6PkA7Cisg ICAgICBfX20yNTZpIGFjY3VtID0gX21tMjU2X2xvYWR1X3NpMjU2KChjb25zdCBfX20yNTZpICop IGJ1Zik7CisJICBhY2N1bSA9IF9tbTI1Nl9hZGRfZXBpMzIoYWNjdW0sIGFjY3VtKTsKKyAgICAg IGludCByZXN1bHQgPSBfbW0yNTZfZXh0cmFjdF9lcGkzMihhY2N1bSwgMCk7CisgICAgICByZXR1 cm4gKGludCkgcmVzdWx0OworICAgIH1dLAorICBbcmV0dXJuIGF2eDJfdGVzdCgpO10pXSwKKyAg W0FjX2NhY2hldmFyPXllc10sCisgIFtBY19jYWNoZXZhcj1ub10pXSkKK2lmIHRlc3QgeCIkQWNf Y2FjaGV2YXIiID0geCJ5ZXMiOyB0aGVuCisgIHBnYWNfYXZ4Ml9zdXBwb3J0PXllcworZmkKK3Vu ZGVmaW5lKFtBY19jYWNoZXZhcl0pZG5sCitdKSMgUEdBQ19BVlgyX1NVUFBPUlQKKwogIyBQR0FD X0FWWDUxMl9QT1BDTlRfSU5UUklOU0lDUwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogIyBDaGVjayBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIEFWWC01MTIgcG9wY291bnQg aW5zdHJ1Y3Rpb25zIHVzaW5nIHRoZQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJl CmluZGV4IGNlZWVmOWIwOTEuLjg3MDgwYjg4NDQgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysg Yi9jb25maWd1cmUKQEAgLTE3MTEzLDYgKzE3MTEzLDU4IEBAICRhc19lY2hvICIjZGVmaW5lIEhB VkVfWFNBVkVfSU5UUklOU0lDUyAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAorIyBDaGVjayBmb3Ig QVZYMiB0YXJnZXQgYW5kIGludHJpbnNpYyBzdXBwb3J0CisjCitpZiB0ZXN0IHgiJGhvc3RfY3B1 IiA9IHgieDg2XzY0IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGNoZWNraW5nIGZvciBBVlgyIHN1cHBvcnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tp bmcgZm9yIEFWWDIgc3VwcG9ydC4uLiAiID4mNjsgfQoraWYgJHtwZ2FjX2N2X2F2eDJfc3VwcG9y dCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisg IGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25m ZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKyAgICAjaW5jbHVkZSA8c3RkaW50 Lmg+CisgICAgI2lmIGRlZmluZWQoX19oYXNfYXR0cmlidXRlKSAmJiBfX2hhc19hdHRyaWJ1dGUg KHRhcmdldCkKKyAgICBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImF2eDIiKSkpCisgICAgI2VuZGlm CisgICAgc3RhdGljIGludCBhdngyX3Rlc3Qodm9pZCkKKyAgICB7CisgICAgICBjb25zdCBjaGFy IGJ1ZltzaXplb2YoX19tMjU2aSldOworICAgICAgX19tMjU2aSBhY2N1bSA9IF9tbTI1Nl9sb2Fk dV9zaTI1NigoY29uc3QgX19tMjU2aSAqKSBidWYpOworCSAgYWNjdW0gPSBfbW0yNTZfYWRkX2Vw aTMyKGFjY3VtLCBhY2N1bSk7CisgICAgICBpbnQgcmVzdWx0ID0gX21tMjU2X2V4dHJhY3RfZXBp MzIoYWNjdW0sIDApOworICAgICAgcmV0dXJuIChpbnQpIHJlc3VsdDsKKyAgICB9CitpbnQKK21h aW4gKCkKK3sKK3JldHVybiBhdngyX3Rlc3QoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VP RgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBwZ2FjX2N2X2F2eDJf c3VwcG9ydD15ZXMKK2Vsc2UKKyAgcGdhY19jdl9hdngyX3N1cHBvcnQ9bm8KK2ZpCitybSAtZiBj b3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19l eGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkcGdhY19jdl9hdngyX3N1cHBvcnQiID4mNQorJGFzX2VjaG8g IiRwZ2FjX2N2X2F2eDJfc3VwcG9ydCIgPiY2OyB9CitpZiB0ZXN0IHgiJHBnYWNfY3ZfYXZ4Ml9z dXBwb3J0IiA9IHgieWVzIjsgdGhlbgorICBwZ2FjX2F2eDJfc3VwcG9ydD15ZXMKK2ZpCisKKyAg aWYgdGVzdCB4IiRwZ2FjX2F2eDJfc3VwcG9ydCIgPSB4InllcyI7IHRoZW4KKworJGFzX2VjaG8g IiNkZWZpbmUgVVNFX0FWWDJfV0lUSF9SVU5USU1FX0NIRUNLIDEiID4+Y29uZmRlZnMuaAorCisg IGZpCitmaQorCiAjIENoZWNrIGZvciBBVlgtNTEyIHBvcGNvdW50IGludHJpbnNpY3MKICMKIGlm IHRlc3QgeCIkaG9zdF9jcHUiID0geCJ4ODZfNjQiOyB0aGVuCmRpZmYgLS1naXQgYS9jb25maWd1 cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggZDcxMzM2MGYzNC4uN2VmZmJmNDBlMiAxMDA2NDQK LS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMjAxMiw2ICsyMDEyLDE1 IEBAIGlmIHRlc3QgeCIkcGdhY194c2F2ZV9pbnRyaW5zaWNzIiA9IHgieWVzIjsgdGhlbgogICBB Q19ERUZJTkUoSEFWRV9YU0FWRV9JTlRSSU5TSUNTLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhh dmUgWFNBVkUgaW50cmluc2ljcy5dKQogZmkKIAorIyBDaGVjayBmb3IgQVZYMiB0YXJnZXQgYW5k IGludHJpbnNpYyBzdXBwb3J0CisjCitpZiB0ZXN0IHgiJGhvc3RfY3B1IiA9IHgieDg2XzY0Ijsg dGhlbgorICBQR0FDX0FWWDJfU1VQUE9SVCgpCisgIGlmIHRlc3QgeCIkcGdhY19hdngyX3N1cHBv cnQiID0geCJ5ZXMiOyB0aGVuCisgICAgQUNfREVGSU5FKFVTRV9BVlgyX1dJVEhfUlVOVElNRV9D SEVDSywgMSwgW0RlZmluZSB0byAxIHRvIHVzZSBBVlgyIGluc3RydWN0aW9ucyB3aXRoIGEgcnVu dGltZSBjaGVjay5dKQorICBmaQorZmkKKwogIyBDaGVjayBmb3IgQVZYLTUxMiBwb3Bjb3VudCBp bnRyaW5zaWNzCiAjCiBpZiB0ZXN0IHgiJGhvc3RfY3B1IiA9IHgieDg2XzY0IjsgdGhlbgpkaWZm IC0tZ2l0IGEvbWVzb24uYnVpbGQgYi9tZXNvbi5idWlsZAppbmRleCA4ZTEyOGY0OTgyLi40ZmQ5 NmZlZTFkIDEwMDY0NAotLS0gYS9tZXNvbi5idWlsZAorKysgYi9tZXNvbi5idWlsZApAQCAtMjE1 OSw2ICsyMTU5LDM0IEBAIGludCBtYWluKHZvaWQpCiAKIGVuZGlmCiAKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDaGVj ayBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBBVlgyIHN1cHBvcnQKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpZiBob3N0 X2NwdSA9PSAneDg2XzY0JworCisgIHByb2cgPSAnJycKKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4K KyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpZiBkZWZpbmVkKF9faGFzX2F0dHJpYnV0ZSkgJiYgX19o YXNfYXR0cmlidXRlICh0YXJnZXQpCitfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImF2eDIiKSkpCisj ZW5kaWYKK2ludCBtYWluKHZvaWQpCit7CisgIGNvbnN0IGNoYXIgYnVmW3NpemVvZihfX20yNTZp KV07CisgIF9fbTI1NmkgYWNjdW0gPSBfbW0yNTZfbG9hZHVfc2kyNTYoKGNvbnN0IF9fbTI1Nmkg KikgYnVmKTsKKyAgYWNjdW0gPSBfbW0yNTZfYWRkX2VwaTMyKGFjY3VtLCBhY2N1bSk7CisgIGlu dCByZXN1bHQgPSBfbW0yNTZfZXh0cmFjdF9lcGkzMihhY2N1bSwgMCk7CisgIHJldHVybiAoaW50 KSByZXN1bHQ7Cit9CisnJycKKworICBpZiBjYy5saW5rcyhwcm9nLCBuYW1lOiAnQVZYMiBzdXBw b3J0JywgYXJnczogdGVzdF9jX2FyZ3MpCisgICAgY2RhdGEuc2V0KCdVU0VfQVZYMl9XSVRIX1JV TlRJTUVfQ0hFQ0snLCAxKQorICBlbmRpZgorCitlbmRpZgorCiAKICMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBDaGVjayBm b3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBBVlgtNTEyIHBvcGNvdW50IGludHJpbnNpY3MuCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbiBiL3NyYy9pbmNsdWRlL3BnX2NvbmZp Zy5oLmluCmluZGV4IDA3YjJmNzk4YWIuLjBmY2Q5ZjA1YTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3BnX2NvbmZpZy5oLmluCisrKyBiL3NyYy9pbmNsdWRlL3BnX2NvbmZpZy5oLmluCkBAIC02 NDUsNiArNjQ1LDkgQEAKIC8qIERlZmluZSB0byAxIHRvIGJ1aWxkIHdpdGggYXNzZXJ0aW9uIGNo ZWNrcy4gKC0tZW5hYmxlLWNhc3NlcnQpICovCiAjdW5kZWYgVVNFX0FTU0VSVF9DSEVDS0lORwog CisvKiBEZWZpbmUgdG8gMSB0byB1c2UgQVZYMiBpbnN0cnVjdGlvbnMgd2l0aCBhIHJ1bnRpbWUg Y2hlY2suICovCisjdW5kZWYgVVNFX0FWWDJfV0lUSF9SVU5USU1FX0NIRUNLCisKIC8qIERlZmlu ZSB0byAxIHRvIHVzZSBBVlgtNTEyIHBvcGNvdW50IGluc3RydWN0aW9ucyB3aXRoIGEgcnVudGlt ZSBjaGVjay4gKi8KICN1bmRlZiBVU0VfQVZYNTEyX1BPUENOVF9XSVRIX1JVTlRJTUVfQ0hFQ0sK IApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9jaGVja3N1bV9pbXBsLmggYi9zcmMv aW5jbHVkZS9zdG9yYWdlL2NoZWNrc3VtX2ltcGwuaAppbmRleCBkYTg3ZDYxYmE1Li41ZWExZjY5 OGI1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2NoZWNrc3VtX2ltcGwuaAorKysg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL2NoZWNrc3VtX2ltcGwuaApAQCAtMTAxLDEyICsxMDEsODMg QEAKICAqLwogCiAjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCisjaW5jbHVkZSAicGdfY29u ZmlnLmgiCiAKIC8qIG51bWJlciBvZiBjaGVja3N1bXMgdG8gY2FsY3VsYXRlIGluIHBhcmFsbGVs ICovCiAjZGVmaW5lIE5fU1VNUyAzMgogLyogcHJpbWUgbXVsdGlwbGllciBvZiBGTlYtMWEgaGFz aCAqLwogI2RlZmluZSBGTlZfUFJJTUUgMTY3Nzc2MTkKIAorI2lmIGRlZmluZWQoSEFWRV9fR0VU X0NQVUlEKSB8fCBkZWZpbmVkKEhBVkVfX0dFVF9DUFVJRF9DT1VOVCkKKyNpbmNsdWRlIDxjcHVp ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKworI2lmIGRlZmluZWQoSEFW RV9fQ1BVSUQpIHx8IGRlZmluZWQoSEFWRV9fQ1BVSURFWCkKKyNpbmNsdWRlIDxpbnRyaW4uaD4K KyNlbmRpZgorCisvKgorICogRG9lcyBDUFVJRCBzYXkgdGhlcmUncyBzdXBwb3J0IGZvciBYU0FW RSBpbnN0cnVjdGlvbnM/CisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoreHNhdmVfYXZhaWxhYmxl KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGV4eFs0XSA9IHswLCAwLCAwLCAwfTsKKworI2lmIGRl ZmluZWQoSEFWRV9fR0VUX0NQVUlEKQorCV9fZ2V0X2NwdWlkKDEsICZleHhbMF0sICZleHhbMV0s ICZleHhbMl0sICZleHhbM10pOworI2VsaWYgZGVmaW5lZChIQVZFX19DUFVJRCkKKwlfX2NwdWlk KGV4eCwgMSk7CisjZWxzZQorI2Vycm9yIGNwdWlkIGluc3RydWN0aW9uIG5vdCBhdmFpbGFibGUK KyNlbmRpZgorCXJldHVybiAoZXh4WzJdICYgKDEgPDwgMjcpKSAhPSAwOwkvKiBvc3hzYXZlICov Cit9CisKKy8qCisgKiBEb2VzIFhHRVRCViBzYXkgdGhlIFlNTSByZWdpc3RlcnMgYXJlIGVuYWJs ZWQ/CisgKgorICogTkI6IENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgdmVyaWZ5aW5nIHRoYXQg eHNhdmVfYXZhaWxhYmxlKCkgcmV0dXJucyB0cnVlCisgKiBiZWZvcmUgY2FsbGluZyB0aGlzLgor ICovCisjaWZkZWYgSEFWRV9YU0FWRV9JTlRSSU5TSUNTCitwZ19hdHRyaWJ1dGVfdGFyZ2V0KCJ4 c2F2ZSIpCisjZW5kaWYKK3N0YXRpYyBpbmxpbmUgYm9vbAoreW1tX3JlZ3NfYXZhaWxhYmxlKHZv aWQpCit7CisjaWZkZWYgSEFWRV9YU0FWRV9JTlRSSU5TSUNTCisJcmV0dXJuIChfeGdldGJ2KDAp ICYgMHgwNikgPT0gMHgwNjsKKyNlbHNlCisJcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKy8q CisgKiBEb2VzIENQVUlEIHNheSB0aGVyZSdzIHN1cHBvcnQgZm9yIEFWWC0yCisgKi8KK3N0YXRp YyBpbmxpbmUgYm9vbAorYXZ4Ml9hdmFpbGFibGUodm9pZCkKK3sKKyNpZmRlZiBVU0VfQVZYMl9X SVRIX1JVTlRJTUVfQ0hFQ0sKKwl1bnNpZ25lZCBpbnQgZXh4WzRdID0gezAsIDAsIDAsIDB9Owor CWlmICgheHNhdmVfYXZhaWxhYmxlKCkgfHwgIXltbV9yZWdzX2F2YWlsYWJsZSgpKSByZXR1cm4g ZmFsc2U7CisKKyNpZiBkZWZpbmVkKEhBVkVfX0dFVF9DUFVJRF9DT1VOVCkKKwlfX2dldF9jcHVp ZF9jb3VudCg3LCAwLCAmZXh4WzBdLCAmZXh4WzFdLCAmZXh4WzJdLCAmZXh4WzNdKTsKKyNlbGlm IGRlZmluZWQoSEFWRV9fQ1BVSURFWCkKKwlfX2NwdWlkZXgoZXh4LCA3LCAwKTsKKyNlbHNlCisj ZXJyb3IgY3B1aWQgaW5zdHJ1Y3Rpb24gbm90IGF2YWlsYWJsZQorI2VuZGlmCisJcmV0dXJuIChl eHhbMV0gJiAoMSA8PCA1KSkgIT0gMDsgLyogYXZ4MiAqLworI2Vsc2UKKwlyZXR1cm4gZmFsc2U7 CisjZW5kaWYKK30KKwogLyogVXNlIGEgdW5pb24gc28gdGhhdCB0aGlzIGNvZGUgaXMgdmFsaWQg dW5kZXIgc3RyaWN0IGFsaWFzaW5nICovCiB0eXBlZGVmIHVuaW9uCiB7CkBAIC0xNDIsMzUgKzIx Myw2OCBAQCBkbyB7IFwKICAqIEJsb2NrIGNoZWNrc3VtIGFsZ29yaXRobS4gIFRoZSBwYWdlIG11 c3QgYmUgYWRlcXVhdGVseSBhbGlnbmVkCiAgKiAoYXQgbGVhc3Qgb24gNC1ieXRlIGJvdW5kYXJ5 KS4KICAqLwotc3RhdGljIHVpbnQzMgotcGdfY2hlY2tzdW1fYmxvY2soY29uc3QgUEdDaGVja3N1 bW1hYmxlUGFnZSAqcGFnZSkKLXsKLQl1aW50MzIJCXN1bXNbTl9TVU1TXTsKLQl1aW50MzIJCXJl c3VsdCA9IDA7Ci0JdWludDMyCQlpLAotCQkJCWo7CisgCisjZGVmaW5lIFBHX0RFQ0xBUkVfQ0hF Q0tTVU1fSVNBKElTQU5BTUUpIFwKK3N0YXRpYyB1aW50MzIgXAorcGdfY2hlY2tzdW1fYmxvY2tf IyNJU0FOQU1FKGNvbnN0IFBHQ2hlY2tzdW1tYWJsZVBhZ2UgKnBhZ2UpOworCisjZGVmaW5lIFBH X0RFRklORV9DSEVDS1NVTV9JU0EoSVNBTkFNRSkgXAorcGdfYXR0cmlidXRlX3RhcmdldCgjSVNB TkFNRSkgXAorc3RhdGljIHVpbnQzMiBcCitwZ19jaGVja3N1bV9ibG9ja18jI0lTQU5BTUUoY29u c3QgUEdDaGVja3N1bW1hYmxlUGFnZSAqcGFnZSkgXAoreyBcCisJdWludDMyCQlzdW1zW05fU1VN U107IFwKKwl1aW50MzIJCXJlc3VsdCA9IDA7IFwKKwl1aW50MzIJCWksIFwKKwkJCQlqOyBcCisg XAorCS8qIGVuc3VyZSB0aGF0IHRoZSBzaXplIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgYWxnb3Jp dGhtICovIFwKKwlBc3NlcnQoc2l6ZW9mKFBHQ2hlY2tzdW1tYWJsZVBhZ2UpID09IEJMQ0tTWik7 IFwKKyBcCisJLyogaW5pdGlhbGl6ZSBwYXJ0aWFsIGNoZWNrc3VtcyB0byB0aGVpciBjb3JyZXNw b25kaW5nIG9mZnNldHMgKi8gXAorCW1lbWNweShzdW1zLCBjaGVja3N1bUJhc2VPZmZzZXRzLCBz aXplb2YoY2hlY2tzdW1CYXNlT2Zmc2V0cykpOyBcCisgXAorCS8qIG1haW4gY2hlY2tzdW0gY2Fs Y3VsYXRpb24gKi8gXAorCS8qIHRoaXMgaXMgdGhlIG1haW4gcGxhY2UgdGhhdCBhdXRvdmVjdG9y aXphdGlvbiBvY2N1cnMgKi8gXAorCWZvciAoaSA9IDA7IGkgPCAodWludDMyKSAoQkxDS1NaIC8g KHNpemVvZih1aW50MzIpICogTl9TVU1TKSk7IGkrKykgXAorCQlmb3IgKGogPSAwOyBqIDwgTl9T VU1TOyBqKyspIFwKKwkJCUNIRUNLU1VNX0NPTVAoc3Vtc1tqXSwgcGFnZS0+ZGF0YVtpXVtqXSk7 IFwKKyBcCisJLyogZmluYWxseSBhZGQgaW4gdHdvIHJvdW5kcyBvZiB6ZXJvZXMgZm9yIGFkZGl0 aW9uYWwgbWl4aW5nICovIFwKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSBcCisJCWZvciAoaiA9 IDA7IGogPCBOX1NVTVM7IGorKykgXAorCQkJQ0hFQ0tTVU1fQ09NUChzdW1zW2pdLCAwKTsgXAor IFwKKwkvKiB4b3IgZm9sZCBwYXJ0aWFsIGNoZWNrc3VtcyB0b2dldGhlciAqLyBcCisJZm9yIChp ID0gMDsgaSA8IE5fU1VNUzsgaSsrKSBcCisJCXJlc3VsdCBePSBzdW1zW2ldOyBcCisgXAorCXJl dHVybiByZXN1bHQ7IFwKK30KIAotCS8qIGVuc3VyZSB0aGF0IHRoZSBzaXplIGlzIGNvbXBhdGli bGUgd2l0aCB0aGUgYWxnb3JpdGhtICovCi0JQXNzZXJ0KHNpemVvZihQR0NoZWNrc3VtbWFibGVQ YWdlKSA9PSBCTENLU1opOworLyogRGVjbGFyYXRpb25zIGFyZSBhbHdheXMgZGVmaW5lZCB0byBt YWtlIGR5bmFtaWMgZGlzcGF0Y2ggY29kZSBzaW1wbGVyICovCiAKLQkvKiBpbml0aWFsaXplIHBh cnRpYWwgY2hlY2tzdW1zIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgb2Zmc2V0cyAqLwotCW1lbWNw eShzdW1zLCBjaGVja3N1bUJhc2VPZmZzZXRzLCBzaXplb2YoY2hlY2tzdW1CYXNlT2Zmc2V0cykp OworUEdfREVDTEFSRV9DSEVDS1NVTV9JU0EoZGVmYXVsdCk7CitQR19ERUNMQVJFX0NIRUNLU1VN X0lTQShhdngyKTsKIAotCS8qIG1haW4gY2hlY2tzdW0gY2FsY3VsYXRpb24gKi8KLQlmb3IgKGkg PSAwOyBpIDwgKHVpbnQzMikgKEJMQ0tTWiAvIChzaXplb2YodWludDMyKSAqIE5fU1VNUykpOyBp KyspCi0JCWZvciAoaiA9IDA7IGogPCBOX1NVTVM7IGorKykKLQkJCUNIRUNLU1VNX0NPTVAoc3Vt c1tqXSwgcGFnZS0+ZGF0YVtpXVtqXSk7CitQR19ERUZJTkVfQ0hFQ0tTVU1fSVNBKGRlZmF1bHQp OworI2lmZGVmIFVTRV9BVlgyX1dJVEhfUlVOVElNRV9DSEVDSworUEdfREVGSU5FX0NIRUNLU1VN X0lTQShhdngyKTsKKyNlbmRpZgogCi0JLyogZmluYWxseSBhZGQgaW4gdHdvIHJvdW5kcyBvZiB6 ZXJvZXMgZm9yIGFkZGl0aW9uYWwgbWl4aW5nICovCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykK LQkJZm9yIChqID0gMDsgaiA8IE5fU1VNUzsgaisrKQotCQkJQ0hFQ0tTVU1fQ09NUChzdW1zW2pd LCAwKTsKK3N0YXRpYyB1aW50MzIKK3BnX2NoZWNrc3VtX2Jsb2NrX2Rpc3BhdGNoKGNvbnN0IFBH Q2hlY2tzdW1tYWJsZVBhZ2UgKnBhZ2UpOwogCi0JLyogeG9yIGZvbGQgcGFydGlhbCBjaGVja3N1 bXMgdG9nZXRoZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTl9TVU1TOyBpKyspCi0JCXJlc3VsdCBe PSBzdW1zW2ldOworc3RhdGljIHVpbnQzMiAoKnBnX2NoZWNrc3VtX2Jsb2NrKShjb25zdCBQR0No ZWNrc3VtbWFibGVQYWdlICpwYWdlKSA9IHBnX2NoZWNrc3VtX2Jsb2NrX2Rpc3BhdGNoOwogCi0J cmV0dXJuIHJlc3VsdDsKK3N0YXRpYyB1aW50MzIKK3BnX2NoZWNrc3VtX2Jsb2NrX2Rpc3BhdGNo KGNvbnN0IFBHQ2hlY2tzdW1tYWJsZVBhZ2UgKnBhZ2UpeworCWlmIChhdngyX2F2YWlsYWJsZSgp KXsKKwkJcGdfY2hlY2tzdW1fYmxvY2sgPSBwZ19jaGVja3N1bV9ibG9ja19hdngyOworCX1lbHNl eworCQlwZ19jaGVja3N1bV9ibG9jayA9IHBnX2NoZWNrc3VtX2Jsb2NrX2RlZmF1bHQ7CisJfQor CXJldHVybiBwZ19jaGVja3N1bV9ibG9jayhwYWdlKTsKIH0KIAogLyoKLS0gCjIuNDMuMAoK --0000000000000cadd70631fb10ff Content-Type: application/octet-stream; name="v1-0002-Benchmark-code-for-postgres-checksums.patch" Content-Disposition: attachment; filename="v1-0002-Benchmark-code-for-postgres-checksums.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m93bxawg1 RnJvbSAwMDEzZDcxOGY5NWFiYjJlYTc5OTdlNGRjMzc0ZDgwYzU1NjBmZjJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGV3IFN0ZXJyZXR0IDxtYXR0aGV3LnN0ZXJyZXR0QGlu dGVsLmNvbT4KRGF0ZTogRnJpLCA3IE1hciAyMDI1IDExOjMzOjI3IC0wODAwClN1YmplY3Q6IFtQ QVRDSCB2MSAyLzJdIEJlbmNobWFyayBjb2RlIGZvciBwb3N0Z3JlcyBjaGVja3N1bXMKCi0tLQog Y29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwogY29u dHJpYi9wZ19jaGVja3N1bV9iZW5jaC9tZXNvbi5idWlsZCAgICAgICAgIHwgMjMgKysrKysrKysr KysrKwogLi4uL3BnX2NoZWNrc3VtX2JlbmNoLS0xLjAuc3FsICAgICAgICAgICAgICAgIHwgIDgg KysrKysKIGNvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVuY2guYyB8IDM0 ICsrKysrKysrKysrKysrKysrKysKIC4uLi9wZ19jaGVja3N1bV9iZW5jaC5jb250cm9sICAgICAg ICAgICAgICAgICB8ICA0ICsrKwogLi4uL3NxbC9wZ19jaGVja3N1bV9iZW5jaC5zcWwgICAgICAg ICAgICAgICAgIHwgMTcgKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA4NyBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9tZXNvbi5i dWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hl Y2tzdW1fYmVuY2gtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2NoZWNr c3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmli L3BnX2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLmNvbnRyb2wKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3NxbC9wZ19jaGVja3N1bV9iZW5jaC5z cWwKCmRpZmYgLS1naXQgYS9jb250cmliL21lc29uLmJ1aWxkIGIvY29udHJpYi9tZXNvbi5idWls ZAppbmRleCAxYmE3M2ViZDY3Li5kN2NhZDIyYWM4IDEwMDY0NAotLS0gYS9jb250cmliL21lc29u LmJ1aWxkCisrKyBiL2NvbnRyaWIvbWVzb24uYnVpbGQKQEAgLTEyLDYgKzEyLDcgQEAgY29udHJp Yl9kb2NfYXJncyA9IHsKICAgJ2luc3RhbGxfZGlyJzogY29udHJpYl9kb2NfZGlyLAogfQogCitz dWJkaXIoJ3BnX2NoZWNrc3VtX2JlbmNoJykKIHN1YmRpcignYW1jaGVjaycpCiBzdWJkaXIoJ2F1 dGhfZGVsYXknKQogc3ViZGlyKCdhdXRvX2V4cGxhaW4nKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9w Z19jaGVja3N1bV9iZW5jaC9tZXNvbi5idWlsZCBiL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gv bWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMzJjY2Q5 ZWZhMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvbWVzb24u YnVpbGQKQEAgLTAsMCArMSwyMyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNSwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdfY2hlY2tzdW1fYmVuY2hfc291cmNl cyA9IGZpbGVzKAorICAncGdfY2hlY2tzdW1fYmVuY2guYycsCispCisKK2lmIGhvc3Rfc3lzdGVt ID09ICd3aW5kb3dzJworICBwZ19jaGVja3N1bV9iZW5jaF9zb3VyY2VzICs9IHJjX2xpYl9nZW4u cHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAncGdfY2hl Y2tzdW1fYmVuY2gnLAorICAgICctLUZJTEVERVNDJywgJ3BnX2NoZWNrc3VtX2JlbmNoJyxdKQor ZW5kaWYKKworcGdfY2hlY2tzdW1fYmVuY2ggPSBzaGFyZWRfbW9kdWxlKCdwZ19jaGVja3N1bV9i ZW5jaCcsCisgIHBnX2NoZWNrc3VtX2JlbmNoX3NvdXJjZXMsCisgIGt3YXJnczogY29udHJpYl9t b2RfYXJncywKKykKK2NvbnRyaWJfdGFyZ2V0cyArPSBwZ19jaGVja3N1bV9iZW5jaAorCitpbnN0 YWxsX2RhdGEoCisgICdwZ19jaGVja3N1bV9iZW5jaC0tMS4wLnNxbCcsCisgICdwZ19jaGVja3N1 bV9iZW5jaC5jb250cm9sJywKKyAga3dhcmdzOiBjb250cmliX2RhdGFfYXJncywKKykKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVuY2gtLTEuMC5z cWwgYi9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLS0xLjAuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjVmMTNjYmUzYzUKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNo LS0xLjAuc3FsCkBAIC0wLDAgKzEsOCBAQAorLyogY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9w Z19jaGVja3N1bV9iZW5jaC0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMg c291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorLS0gXGVj aG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHBnX2NoZWNrc3VtX2JlbmNoIiB0byBsb2FkIHRoaXMg ZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIGRyaXZlX3BnX2NoZWNrc3VtKHBhZ2VfY291 bnQgaW50KQorCVJFVFVSTlMgcGdfY2F0YWxvZy52b2lkCisJQVMgJ01PRFVMRV9QQVRITkFNRScg TEFOR1VBR0UgQzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hl Y2tzdW1fYmVuY2guYyBiL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVu Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mNDBmMzM1ZmY1Ci0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9wZ19jaGVja3N1bV9i ZW5jaC5jCkBAIC0wLDAgKzEsMzQgQEAKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1ZGUg ImZtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2NoZWNrc3VtX2ltcGwuaCIKKworI2luY2x1ZGUg PHN0ZGlvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKK1BHX01PRFVMRV9NQUdJQzsKKworI2Rl ZmluZSBSRVBFQVRTIDEwMDAwMDAKKworUEdfRlVOQ1RJT05fSU5GT19WMShkcml2ZV9wZ19jaGVj a3N1bSk7CitEYXR1bQorZHJpdmVfcGdfY2hlY2tzdW0oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlp bnQgcGFnZV9jb3VudCA9IFBHX0dFVEFSR19JTlQzMigwKTsKKworCVBHQ2hlY2tzdW1tYWJsZVBh Z2UgKiBwYWdlcyA9IHBhbGxvYyhwYWdlX2NvdW50ICogc2l6ZW9mKFBHQ2hlY2tzdW1tYWJsZVBh Z2UpKTsKKwlzcmFuZCgwKTsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhZ2VfY291bnQgKiBz aXplb2YoUEdDaGVja3N1bW1hYmxlUGFnZSk7IGkrKyl7CisJCWNoYXIgKiBieXRlX3B0ciA9IChj aGFyICopIHBhZ2VzOworCQlieXRlX3B0cltpXSA9IHJhbmQoKSAlIDI1NjsKKwl9CisKKwlmb3Ig KGludCBpID0gMDsgaSA8IFJFUEVBVFM7IGkrKyl7CisJCWNvbnN0IFBHQ2hlY2tzdW1tYWJsZVBh Z2UgKiB0ZXN0X3BhZ2UgPSBwYWdlcyArIChpICUgcGFnZV9jb3VudCk7CisJCXZvbGF0aWxlIHVp bnQzMiByZXN1bHQgPSBwZ19jaGVja3N1bV9ibG9jayh0ZXN0X3BhZ2UpOworCQkodm9pZCkgcmVz dWx0OworCX0KKworCXBmcmVlKCh2b2lkICopIHBhZ2VzKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7 Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNrc3VtX2Jl bmNoLmNvbnRyb2wgYi9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNo LmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNGE0ZTJjOTM2 MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tz dW1fYmVuY2guY29udHJvbApAQCAtMCwwICsxLDQgQEAKK2NvbW1lbnQgPSAncGdfY2hlY2tzdW0g YmVuY2htYXJrJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICck bGliZGlyL3BnX2NoZWNrc3VtX2JlbmNoJworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQg YS9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3NxbC9wZ19jaGVja3N1bV9iZW5jaC5zcWwgYi9j b250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3NxbC9wZ19jaGVja3N1bV9iZW5jaC5zcWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNGIzNDc2OTk5NQotLS0gL2Rldi9udWxs CisrKyBiL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvc3FsL3BnX2NoZWNrc3VtX2JlbmNoLnNx bApAQCAtMCwwICsxLDE3IEBACitDUkVBVEUgRVhURU5TSU9OIHBnX2NoZWNrc3VtX2JlbmNoOwor CitTRUxFQ1QgZHJpdmVfcGdfY2hlY2tzdW0oLTEpOworCitcdGltaW5nIG9uCisKK1NFTEVDVCBk cml2ZV9wZ19jaGVja3N1bSgxKTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSgyKTsKK1NFTEVD VCBkcml2ZV9wZ19jaGVja3N1bSg0KTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSg4KTsKK1NF TEVDVCBkcml2ZV9wZ19jaGVja3N1bSgxNik7CitTRUxFQ1QgZHJpdmVfcGdfY2hlY2tzdW0oMzIp OworU0VMRUNUIGRyaXZlX3BnX2NoZWNrc3VtKDY0KTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1 bSgxMjgpOworU0VMRUNUIGRyaXZlX3BnX2NoZWNrc3VtKDI1Nik7CitTRUxFQ1QgZHJpdmVfcGdf Y2hlY2tzdW0oNTEyKTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSgxMDI0KTsKLS0gCjIuNDMu MAoK --0000000000000cadd70631fb10ff--