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 1wD1Ki-002WiL-0G for pgsql-bugs@arkaria.postgresql.org; Wed, 15 Apr 2026 14:35:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wD17f-00HLNO-06 for pgsql-bugs@arkaria.postgresql.org; Wed, 15 Apr 2026 14:21:43 +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.96) (envelope-from ) id 1wD14z-00Gylu-25 for pgsql-bugs@lists.postgresql.org; Wed, 15 Apr 2026 14:18:58 +0000 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wCvUY-000000016k1-1NyF for pgsql-bugs@lists.postgresql.org; Wed, 15 Apr 2026 08:21:00 +0000 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-488af96f6b2so85676105e9.0 for ; Wed, 15 Apr 2026 01:20:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776241257; x=1776846057; darn=lists.postgresql.org; h=subject:from:content-language:to:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=Ss/9ZSFE3ukR6lX7JRnO5hVnLYoZnra4fNScGYjKvWE=; b=ijDPQbv3J9OLv7e7wts0KB7+7TEV18Gp4I54Rp1urBFSkvTWorRwqePSdpGR4ANboG Th4qRA/dQQGSIiJBKFbtJrMnjpGsKYnzOu12k2F/8enEJzSYPT2dgcG1N592lgr+dstI 2uzqXs5xMSwICSHcDrE8ah3rzXkq+QAE7q95cKetDOpzcdzndWPluyDPoWf4mIE/wOI0 yMpDp410jSNObM2T9oR5jnnwje76BGeih6+OzlRgnoGqh06EvQrM1S22hzBM5H7omFRI wUvqjGJY4Wb7o38b1y4d2WicLV5h1AAEyoqVDDBMH1I8GmvfjYYs6j1TnMZbonl44/Xs 4e3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776241257; x=1776846057; h=subject:from:content-language:to:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Ss/9ZSFE3ukR6lX7JRnO5hVnLYoZnra4fNScGYjKvWE=; b=aQ6hXPV4y5Mhg3MXXxmc87TwQKw6SX+4FmvAuFPtiiRgc2YuKeHrpia201F1kHnfk1 7fmxADd+EYqPQmnWa/5yi/d7/mp1wbBFSodZFnRM4MtJKcYP75xrLk3OgDDSx39bjQ4X oh/teiHA6BUc3usZk94xSbRRc3wx86uvCju2sALG5JkBbp19aGo5UxHWK74JSfvLcqpm j5GyXcqCGDhuvmuuM2Dm5hIBBm75hZjiep8ulCPBc62fCiNLd2KrLtu4C3Qn8Fiyqn5M pWwd9236UrgBvra91lGpwF3wD0eQGnI4oKr2Pzo0SfU8B4BIUKRoaeMfua0DDY6umwBw yv4g== X-Gm-Message-State: AOJu0YwZHfRIEcG6noRONI1glc/s53HlfRa3v/g2bCb7fQF+2A9CXHzm Q3Lap8cPD6xkCbiTwkF0K2AfmQtoSdo9XllndDtKJ0xGNxhpIFgxP9gubiaxG6lP X-Gm-Gg: AeBDiev8jzdAFr+tIxn/zYk595moa6KY96omowGv7bvPVTXd+Afu9vuO3yOR/T3hxfR irk5jnP77TH9BEbu0jaR6j/a4FRBh8PLGp8hz9QZeO/ihKnkg+rxN94444wk4yzq8b6XQ6sFjGY KVeW3CAwvFQb2wa1yQw9FHKm9+7nGOfIS6OLCz06VQYePPGNfMHecru3x5D4ltx7sKqksJj+SNN wa1Z9V3MVCVT7foIsZfIOKuI7Op7TxibTLW/eUHj4kLKl4BCtIm1aX4FmhLGt3piJp6OI78hxyY jjZWuEe5JHjRvdzaV+k4ZaHd8AabxQuut72Dn4vVKoo4L7y0X8GMapYw2zydQmQXmIqEviDuMTi WvnJBi9pgtqKycIQdCDAjwW1l7KkZQMtuRhu5FQNuvS0i9Y3WQtK4xoPuoK1hhd6GK/6SjbQ6Hs LFugWECuVqt0J/4T2Hlqd3OzK5JjHTlK/CeW7MrQ== X-Received: by 2002:a05:600c:5308:b0:488:8d44:bf98 with SMTP id 5b1f17b1804b1-488d67f088amr290704925e9.7.1776241256920; Wed, 15 Apr 2026 01:20:56 -0700 (PDT) Received: from [192.168.15.160] ([80.251.191.198]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-488f0943698sm15500625e9.4.2026.04.15.01.20.55 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 15 Apr 2026 01:20:55 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------I0cLm04eZHSzCQarRvxQ0oKI" Message-ID: Date: Wed, 15 Apr 2026 10:20:54 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: PostgreSQL mailing lists Content-Language: en-US From: Andrei Lepikhov Subject: MergeJoin fails on incomplete btree opfamily definition List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------I0cLm04eZHSzCQarRvxQ0oKI Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi, While experimenting with chaotic cost assignment [1], I found that equivclass.sql contains a query that sometimes fails with an error: -- let's try that as a mergejoin set enable_mergejoin = on; set enable_nestloop = off; explain (costs off) select * from ec1, (select ff + 1 as x from ... The underlying problem is simple: an incomplete btree operator family. That would be acceptable if the behaviour were consistent, but as the attached self-contained SQL script shows, it is unstable and depends on which sort direction the planner happens to choose for the merge join's internal sort — the same catalogue state can yield either a valid plan or an elog(ERROR) depending on cost-driven decisions. The main reason to fix this: when the opfamily lacks the ordering operator required to sort one side of a merge, the planner should skip the MergeJoin strategy and fall back to another join method, rather than constructing an unusable plan and crashing in prepare_sort_from_pathkeys(). I have verified the issue reproduces on current master. This code is unchanged for several releases, so it seems worth fixing and back-patching. The issue actually has two layers. The "missing operator" error is the first one. There is a related "missing support function" error on the same path — I'll discover it later if there is interest in this topic. See the proposed fix for the current problem. [1] https://github.com/danolivo/pg-chaos-test -- regards, Andrei Lepikhov, pgEdge --------------I0cLm04eZHSzCQarRvxQ0oKI Content-Type: text/plain; charset=UTF-8; name="repro_layer_1.sql" Content-Disposition: attachment; filename="repro_layer_1.sql" Content-Transfer-Encoding: base64 QkVHSU47CgpDUkVBVEUgVFlQRSBpbnQ4YWxpYXMxOwpDUkVBVEUgRlVOQ1RJT04gaW50OGFs aWFzMWluKGNzdHJpbmcpIFJFVFVSTlMgaW50OGFsaWFzMQogIFNUUklDVCBJTU1VVEFCTEUg TEFOR1VBR0UgaW50ZXJuYWwgQVMgJ2ludDhpbic7CkNSRUFURSBGVU5DVElPTiBpbnQ4YWxp YXMxb3V0KGludDhhbGlhczEpIFJFVFVSTlMgY3N0cmluZwogIFNUUklDVCBJTU1VVEFCTEUg TEFOR1VBR0UgaW50ZXJuYWwgQVMgJ2ludDhvdXQnOwpDUkVBVEUgVFlQRSBpbnQ4YWxpYXMx IChpbnB1dCA9IGludDhhbGlhczFpbiwgb3V0cHV0ID0gaW50OGFsaWFzMW91dCwgbGlrZSA9 IGludDgpOwpDUkVBVEUgQ0FTVCAoaW50OCBBUyBpbnQ4YWxpYXMxKSBXSVRIT1VUIEZVTkNU SU9OOwoKQ1JFQVRFIEZVTkNUSU9OIGludDhhbGlhczFlcShpbnQ4YWxpYXMxLCBpbnQ4YWxp YXMxKSBSRVRVUk5TIGJvb2wKICBTVFJJQ1QgSU1NVVRBQkxFIExBTkdVQUdFIGludGVybmFs IEFTICdpbnQ4ZXEnOwpDUkVBVEUgT1BFUkFUT1IgPSAoCiAgcHJvY2VkdXJlID0gaW50OGFs aWFzMWVxLAogIGxlZnRhcmcgPSBpbnQ4YWxpYXMxLCByaWdodGFyZyA9IGludDhhbGlhczEs CiAgY29tbXV0YXRvciA9ID0sIG1lcmdlcwopOwpDUkVBVEUgRlVOQ1RJT04gaW50OGFsaWFz MWx0KGludDhhbGlhczEsIGludDhhbGlhczEpIFJFVFVSTlMgYm9vbAogIFNUUklDVCBJTU1V VEFCTEUgTEFOR1VBR0UgaW50ZXJuYWwgQVMgJ2ludDhsdCc7CkNSRUFURSBPUEVSQVRPUiA8 IChwcm9jZWR1cmUgPSBpbnQ4YWxpYXMxbHQsCiAgbGVmdGFyZyA9IGludDhhbGlhczEsIHJp Z2h0YXJnID0gaW50OGFsaWFzMSk7CgpDUkVBVEUgRlVOQ1RJT04gaW50OGFsaWFzMWd0KGlu dDhhbGlhczEsIGludDhhbGlhczEpIFJFVFVSTlMgYm9vbAogIFNUUklDVCBJTU1VVEFCTEUg TEFOR1VBR0UgaW50ZXJuYWwgQVMgJ2ludDhndCc7CkNSRUFURSBPUEVSQVRPUiA+IChwcm9j ZWR1cmUgPSBpbnQ4YWxpYXMxZ3QsCiAgbGVmdGFyZyA9IGludDhhbGlhczEsIHJpZ2h0YXJn ID0gaW50OGFsaWFzMSk7CgpDUkVBVEUgRlVOQ1RJT04gaW50OGFsaWFzMWNtcChpbnQ4YWxp YXMxLCBpbnQ4YWxpYXMxKSBSRVRVUk5TIGludAogIFNUUklDVCBJTU1VVEFCTEUgTEFOR1VB R0UgaW50ZXJuYWwgQVMgJ2J0aW50OGNtcCc7CgpBTFRFUiBPUEVSQVRPUiBGQU1JTFkgaW50 ZWdlcl9vcHMgVVNJTkcgYnRyZWUgQURECiAgICBPUEVSQVRPUiAzID0gKGludDhhbGlhczEs IGludDhhbGlhczEpLAotLSAgICBPUEVSQVRPUiAxIDwgKGludDhhbGlhczEsIGludDhhbGlh czEpLAogICAgT1BFUkFUT1IgNSA+IChpbnQ4YWxpYXMxLCBpbnQ4YWxpYXMxKSwKICAgIEZV TkNUSU9OIDEgaW50OGFsaWFzMWNtcChpbnQ4YWxpYXMxLCBpbnQ4YWxpYXMxKTsKCkNSRUFU RSBUQUJMRSB0MSAoYiBpbnQ4YWxpYXMxKTsKQ1JFQVRFIFRBQkxFIHQyIChiIGludDhhbGlh czEpOwoKU0VUIGVuYWJsZV9uZXN0bG9vcCA9IG9mZjsKU0VUIGVuYWJsZV9oYXNoam9pbiA9 IG9mZjsKU0VUIGVuYWJsZV9tZXJnZWpvaW4gPSBvbjsKCkVYUExBSU4gKENPU1RTIE9GRikg U0VMRUNUICogRlJPTSB0MSBKT0lOIHQyIE9OIHQxLmIgPSB0Mi5iOwoKUk9MTEJBQ0s7Cgov KgpFeHBlY3RlZCBvbiB2YW5pbGxhIFBvc3RncmVTUUw6CgpFUlJPUjogIG1pc3Npbmcgb3Bl cmF0b3IgMSgxLi4uKSBpbiBvcGZhbWlseSAxOTc2CgpFeHBlY3RlZCB3aXRoIHRoZSBwYXRj aCBhcHBsaWVkOgoKICAgICAgICAgICAgIFFVRVJZIFBMQU4KLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiBOZXN0ZWQgTG9vcAogICBEaXNhYmxlZDogdHJ1ZQogICBK b2luIEZpbHRlcjogKHQxLmIgPSB0Mi5iKQogICAtPiAgU2VxIFNjYW4gb24gdDEKICAgLT4g IFNlcSBTY2FuIG9uIHQyCig1IHJvd3MpCiovCg== --------------I0cLm04eZHSzCQarRvxQ0oKI Content-Type: text/plain; charset=UTF-8; name="v0-0001-Skip-merge-join-paths-when-opfamily-lacks-orderin.patch" Content-Disposition: attachment; filename*0="v0-0001-Skip-merge-join-paths-when-opfamily-lacks-orderin.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBjZTM3M2E0NGZlNTIwMmUyNDczNGM0MTIyZjAxNzkzNjJmZjVhMGE3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmVpIFYuIExlcGlraG92IiA8bGVwaWhvdkBn bWFpbC5jb20+CkRhdGU6IFdlZCwgMTUgQXByIDIwMjYgMDg6MDE6NDEgKzAyMDAKU3ViamVj dDogW1BBVENIIHYwXSBTa2lwIG1lcmdlIGpvaW4gcGF0aHMgd2hlbiBvcGZhbWlseSBsYWNr cyBvcmRlcmluZwogb3BlcmF0b3JzCgpBbiBpbmNvbXBsZXRlIGJ0cmVlIG9wZmFtaWx5IGRl ZmluaXRpb24gY291bGQgY2F1c2UgdGhlIHBsYW5uZXIgdG8gY29uc3RydWN0CmEgbWVyZ2Ug am9pbiBwYXRoIHRoYXQgY2Fubm90IGJlIGltcGxlbWVudGVkLgotLS0KIHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYyAgfCAzOSArKysrKysrKysrKysrKysrKysr KysrKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMgICAgfCAyMyAr KysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMuYyAg ICB8IDI3ICsrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5o ICAgICAgICAgICAgfCAgMyArKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lcXVpdmNs YXNzLm91dCB8IDM2ICsrKysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2VxdWl2Y2xhc3Muc3FsICAgICAgfCAyNiArKysrKysrKysrKysrKysrCiA2IGZpbGVz IGNoYW5nZWQsIDE1NCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvZXF1aXZjbGFzcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvZXF1aXZjbGFzcy5jCmluZGV4IGUzNjk3ZGY1MWEyLi42NzkwNGJiNWY0NyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZjbGFzcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYwpAQCAtMTEzNyw2ICsxMTM3 LDQ1IEBAIHJlbGF0aW9uX2Nhbl9iZV9zb3J0ZWRfZWFybHkoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbCwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIGVjX2hhc19z b3J0YWJsZV9tZW1iZXIKKyAqCQlDaGVjayB3aGV0aGVyIGFuIEVxdWl2YWxlbmNlQ2xhc3Mg aGFzIGF0IGxlYXN0IG9uZSBub24tY29uc3RhbnQgbWVtYmVyCisgKgkJYmVsb25naW5nIHRv ICdyZWxpZHMnIGZvciB3aGljaCBhIHNvcnQgb3BlcmF0b3Igb2YgdGhlIGdpdmVuIGNvbXBh cmUKKyAqCQl0eXBlIGV4aXN0cyBpbiB0aGUgc3BlY2lmaWVkIG9wZmFtaWx5LiAgUmV0dXJu cyBmYWxzZSBpZiBubyBxdWFsaWZ5aW5nCisgKgkJbWVtYmVyIGhhcyBhIHZhbGlkIHNvcnQg b3BlcmF0b3IsIHdoaWNoIGNhbiBoYXBwZW4gd2l0aCBpbmNvbXBsZXRlCisgKgkJb3BmYW1p bHkgZGVmaW5pdGlvbnMuCisgKi8KK2Jvb2wKK2VjX2hhc19zb3J0YWJsZV9tZW1iZXIoRXF1 aXZhbGVuY2VDbGFzcyAqZWMsIFJlbGlkcyByZWxpZHMsCisJCQkJCSAgIE9pZCBvcGZhbWls eSwgQ29tcGFyZVR5cGUgY21wdHlwZSkKK3sKKwlFcXVpdmFsZW5jZU1lbWJlckl0ZXJhdG9y IGl0OworCUVxdWl2YWxlbmNlTWVtYmVyICplbTsKKworCXNldHVwX2VjbGFzc19tZW1iZXJf aXRlcmF0b3IoJml0LCBlYywgcmVsaWRzKTsKKwl3aGlsZSAoKGVtID0gZWNsYXNzX21lbWJl cl9pdGVyYXRvcl9uZXh0KCZpdCkpICE9IE5VTEwpCisJeworCQlpZiAoZW0tPmVtX2lzX2Nv bnN0KQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogT25seSBjb25zaWRlciBtZW1iZXJz IHRoYXQgYmVsb25nIHRvIHRoZSBzcGVjaWZpZWQgcmVsYXRpb24uCisJCSAqIFRoZSBpdGVy YXRvciByZXR1cm5zIGFsbCBub24tY2hpbGQgbWVtYmVycyByZWdhcmRsZXNzIG9mIHJlbGlk cywKKwkJICogc28gd2UgbXVzdCBmaWx0ZXIgZXhwbGljaXRseS4KKwkJICovCisJCWlmICgh Ym1zX2lzX3N1YnNldChlbS0+ZW1fcmVsaWRzLCByZWxpZHMpKQorCQkJY29udGludWU7CisK KwkJaWYgKE9pZElzVmFsaWQoZ2V0X29wZmFtaWx5X21lbWJlcl9mb3JfY21wdHlwZShvcGZh bWlseSwKKwkJCQkJCQkJCQkJCQkgICBlbS0+ZW1fZGF0YXR5cGUsCisJCQkJCQkJCQkJCQkJ ICAgZW0tPmVtX2RhdGF0eXBlLAorCQkJCQkJCQkJCQkJCSAgIGNtcHR5cGUpKSkKKwkJCXJl dHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwogLyoKICAqIGdlbmVyYXRl X2Jhc2VfaW1wbGllZF9lcXVhbGl0aWVzCiAgKgkgIEdlbmVyYXRlIGFueSByZXN0cmljdGlv biBjbGF1c2VzIHRoYXQgd2UgY2FuIGRlZHVjZSBmcm9tIGVxdWl2YWxlbmNlCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYwppbmRleCA3MTMyODNhNzNhYS4uMjEwZDQ5 YTQ2MjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRo LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYwpAQCAtMTUz NSw2ICsxNTM1LDE1IEBAIHNvcnRfaW5uZXJfYW5kX291dGVyKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJCQkJCQkJICBjdXJfbWVyZ2VjbGF1c2VzLAogCQkJCQkJCQkJCQkJICBvdXRl cmtleXMpOwogCisJCS8qCisJCSAqIFZlcmlmeSB0aGF0IGJvdGggc2lkZXMgY2FuIGFjdHVh bGx5IGJlIHNvcnRlZCBvbiB0aGVzZSBwYXRoa2V5cy4KKwkJICogQW4gaW5jb21wbGV0ZSBv cGZhbWlseSAoZS5nLiBlcXVhbGl0eSB3aXRob3V0IG9yZGVyaW5nIG9wZXJhdG9ycykKKwkJ ICogY291bGQgcGFzcyB0aGUgbWVyZ2Vqb2luYWJsZSBjaGVjayBidXQgZmFpbCBhdCBzb3J0 IHRpbWUuCisJCSAqLworCQlpZiAoIXBhdGhrZXlzX2FyZV9zb3J0YWJsZV9mb3JfcmVsKG91 dGVya2V5cywgb3V0ZXJyZWwtPnJlbGlkcykgfHwKKwkJCSFwYXRoa2V5c19hcmVfc29ydGFi bGVfZm9yX3JlbChpbm5lcmtleXMsIGlubmVycmVsLT5yZWxpZHMpKQorCQkJY29udGludWU7 CisKIAkJLyogQnVpbGQgcGF0aGtleXMgcmVwcmVzZW50aW5nIG91dHB1dCBzb3J0IG9yZGVy ICovCiAJCW1lcmdlX3BhdGhrZXlzID0gYnVpbGRfam9pbl9wYXRoa2V5cyhyb290LCBqb2lu cmVsLCBqb2ludHlwZSwKIAkJCQkJCQkJCQkJIG91dGVya2V5cyk7CkBAIC0xNjQxLDYgKzE2 NTAsMjAgQEAgZ2VuZXJhdGVfbWVyZ2Vqb2luX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAog CQkJCQkJCQkJCQkJICBtZXJnZWNsYXVzZXMsCiAJCQkJCQkJCQkJCQkgIG91dGVycGF0aC0+ cGF0aGtleXMpOwogCisJLyoKKwkgKiBWZXJpZnkgdGhhdCB0aGUgaW5uZXIgc2lkZSBjYW4g YmUgc29ydGVkIG9uIHRoZXNlIHBhdGhrZXlzLiAgQW4KKwkgKiBpbmNvbXBsZXRlIG9wZmFt aWx5IChlLmcuIGVxdWFsaXR5IHdpdGhvdXQgb3JkZXJpbmcgb3BlcmF0b3JzKSBjb3VsZAor CSAqIGFsbG93IGEgbWVyZ2Vqb2luIHBhdGggdGhhdCBjYW5ub3QgYmUgaW1wbGVtZW50ZWQu CisJICoKKwkgKiBXZSBvbmx5IGNoZWNrIHRoZSBpbm5lciBzaWRlIGhlcmUgYmVjYXVzZSB0 aGUgb3V0ZXIgcGF0aCBpcyBhbHJlYWR5CisJICogb3JkZXJlZCAodGhpcyBmdW5jdGlvbiBp cyBjYWxsZWQgZnJvbSBtYXRjaF91bnNvcnRlZF9vdXRlciB3aGVyZSB0aGUKKwkgKiBvdXRl ciBwYXRoJ3MgZXhpc3RpbmcgcGF0aGtleXMgZHJpdmUgdGhlIG1lcmdlKS4gIFRoZSBvdXRl ciBzaWRlCisJICogbmV2ZXIgbmVlZHMgYW4gZXhwbGljaXQgc29ydCwgc28gb3V0ZXJzb3J0 a2V5cyBpcyBhbHdheXMgTklMIGluIHRoZQorCSAqIHRyeV9tZXJnZWpvaW5fcGF0aCBjYWxs IGJlbG93LgorCSAqLworCWlmICghcGF0aGtleXNfYXJlX3NvcnRhYmxlX2Zvcl9yZWwoaW5u ZXJzb3J0a2V5cywgaW5uZXJyZWwtPnJlbGlkcykpCisJCXJldHVybjsKKwogCS8qCiAJICog R2VuZXJhdGUgYSBtZXJnZWpvaW4gb24gdGhlIGJhc2lzIG9mIHNvcnRpbmcgdGhlIGNoZWFw ZXN0IGlubmVyLiBTaW5jZQogCSAqIGEgc29ydCB3aWxsIGJlIG5lZWRlZCwgb25seSBjaGVh cGVzdCB0b3RhbCBjb3N0IG1hdHRlcnMuIChCdXQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9wYXRoa2V5cy5jCmluZGV4IDVlYjcxNjM1ZDE1Li44M2U1ZTQyZDM5MyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMuYworKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5jCkBAIC0zNTMsNiArMzUzLDMzIEBAIHBh dGhrZXlzX2NvbnRhaW5lZF9pbihMaXN0ICprZXlzMSwgTGlzdCAqa2V5czIpCiAJcmV0dXJu IGZhbHNlOwogfQogCisvKgorICogcGF0aGtleXNfYXJlX3NvcnRhYmxlX2Zvcl9yZWwKKyAq CQlDaGVjayB3aGV0aGVyIGV2ZXJ5IHBhdGhrZXkgaW4gdGhlIGxpc3QgaGFzIGEgdXNhYmxl IHNvcnQgb3BlcmF0b3IKKyAqCQlmb3IgYXQgbGVhc3Qgb25lIEVxdWl2YWxlbmNlQ2xhc3Mg bWVtYmVyIGJlbG9uZ2luZyB0byAncmVsaWRzJy4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlm IGFueSBwYXRoa2V5J3Mgb3BmYW1pbHkgbGFja3MgdGhlIHJlcXVpcmVkIG9yZGVyaW5nCisg KiBvcGVyYXRvciBmb3IgYWxsIEVDIG1lbWJlcnMgb2YgdGhlIGdpdmVuIHJlbGF0aW9uLiAg VGhpcyBjYXRjaGVzCisgKiBpbmNvbXBsZXRlIG9wZmFtaWx5IGRlZmluaXRpb25zIChlLmcu IGVxdWFsaXR5IHJlZ2lzdGVyZWQgd2l0aG91dAorICogY29ycmVzcG9uZGluZyBvcmRlcmlu ZyBvcGVyYXRvcnMpIHRoYXQgd291bGQgY2F1c2UgYW4gZXJyb3IgbGF0ZXIKKyAqIGluIHBy ZXBhcmVfc29ydF9mcm9tX3BhdGhrZXlzKCkuCisgKi8KK2Jvb2wKK3BhdGhrZXlzX2FyZV9z b3J0YWJsZV9mb3JfcmVsKExpc3QgKnBhdGhrZXlzLCBSZWxpZHMgcmVsaWRzKQoreworCUxp c3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgcGF0aGtleXMpCisJeworCQlQYXRoS2V5 ICAgICpwayA9IChQYXRoS2V5ICopIGxmaXJzdChsYyk7CisKKwkJaWYgKCFlY19oYXNfc29y dGFibGVfbWVtYmVyKHBrLT5wa19lY2xhc3MsIHJlbGlkcywKKwkJCQkJCQkJCXBrLT5wa19v cGZhbWlseSwgcGstPnBrX2NtcHR5cGUpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1 cm4gdHJ1ZTsKK30KKwogLyoKICAqIGdyb3VwX2tleXNfcmVvcmRlcl9ieV9wYXRoa2V5cwog ICoJCVJlb3JkZXIgR1JPVVAgQlkgcGF0aGtleXMgYW5kIGNsYXVzZXMgdG8gbWF0Y2ggdGhl IGlucHV0IHBhdGhrZXlzLgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Bh dGhzLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAppbmRleCAxN2YyMDk5ZWMz Yi4uNmI5YWRjYTI5MjEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRo cy5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCkBAIC0xNTcsNiArMTU3 LDggQEAgZXh0ZXJuIEVxdWl2YWxlbmNlTWVtYmVyICpmaW5kX2NvbXB1dGFibGVfZWNfbWVt YmVyKFBsYW5uZXJJbmZvICpyb290LAogZXh0ZXJuIGJvb2wgcmVsYXRpb25fY2FuX2JlX3Nv cnRlZF9lYXJseShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJ CQkJCSBFcXVpdmFsZW5jZUNsYXNzICplYywKIAkJCQkJCQkJCQkgYm9vbCByZXF1aXJlX3Bh cmFsbGVsX3NhZmUpOworZXh0ZXJuIGJvb2wgZWNfaGFzX3NvcnRhYmxlX21lbWJlcihFcXVp dmFsZW5jZUNsYXNzICplYywgUmVsaWRzIHJlbGlkcywKKwkJCQkJCQkJICAgT2lkIG9wZmFt aWx5LCBDb21wYXJlVHlwZSBjbXB0eXBlKTsKIGV4dGVybiB2b2lkIGdlbmVyYXRlX2Jhc2Vf aW1wbGllZF9lcXVhbGl0aWVzKFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVybiBMaXN0ICpn ZW5lcmF0ZV9qb2luX2ltcGxpZWRfZXF1YWxpdGllcyhQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCQkJCQkJICBSZWxpZHMgam9pbl9yZWxpZHMsCkBAIC0yMjUsNiArMjI3LDcgQEAgdHlw ZWRlZiBlbnVtCiBleHRlcm4gUGF0aEtleXNDb21wYXJpc29uIGNvbXBhcmVfcGF0aGtleXMo TGlzdCAqa2V5czEsIExpc3QgKmtleXMyKTsKIGV4dGVybiBib29sIHBhdGhrZXlzX2NvbnRh aW5lZF9pbihMaXN0ICprZXlzMSwgTGlzdCAqa2V5czIpOwogZXh0ZXJuIGJvb2wgcGF0aGtl eXNfY291bnRfY29udGFpbmVkX2luKExpc3QgKmtleXMxLCBMaXN0ICprZXlzMiwgaW50ICpu X2NvbW1vbik7CitleHRlcm4gYm9vbCBwYXRoa2V5c19hcmVfc29ydGFibGVfZm9yX3JlbChM aXN0ICpwYXRoa2V5cywgUmVsaWRzIHJlbGlkcyk7CiBleHRlcm4gTGlzdCAqZ2V0X3VzZWZ1 bF9ncm91cF9rZXlzX29yZGVyaW5ncyhQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqcGF0aCk7 CiBleHRlcm4gUGF0aCAqZ2V0X2NoZWFwZXN0X3BhdGhfZm9yX3BhdGhrZXlzKExpc3QgKnBh dGhzLCBMaXN0ICpwYXRoa2V5cywKIAkJCQkJCQkJCQkJUmVsaWRzIHJlcXVpcmVkX291dGVy LApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lcXVpdmNsYXNzLm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXF1aXZjbGFzcy5vdXQKaW5kZXggYWQ4 YWIyOTRmZjYuLjdjN2FjMjE4YjBkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2VxdWl2Y2xhc3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv ZXF1aXZjbGFzcy5vdXQKQEAgLTQ4NSw2ICs0ODUsNDIgQEAgZXhwbGFpbiAoY29zdHMgb2Zm KSAgLS0gdGhpcyBzaG91bGQgbm90IHJlcXVpcmUgYSBzb3J0CiAgICBGaWx0ZXI6IChmMSA9 ICdmb28nOjpuYW1lKQogKDIgcm93cykKIAorLS0KKy0tIGNoZWNrIHRoYXQgaW5jb21wbGV0 ZSBvcGZhbWlseSBkb2VzIG5vdCBjYXVzZSBtZXJnZSBqb2luIHRvIGNyYXNoLgorLS0gdGhl IDwgb3BlcmF0b3IgZm9yIGludDhhbGlhczEgaXMgdGVtcG9yYXJpbHkgcmVtb3ZlZCBmcm9t IHRoZSBvcGZhbWlseQorLS0gdG8gc2ltdWxhdGUgYW4gaW5jb21wbGV0ZSBkZWZpbml0aW9u IChlcXVhbGl0eSB3aXRob3V0IG9yZGVyaW5nIG9wZXJhdG9ycykuCistLQorYmVnaW47Cith bHRlciBvcGVyYXRvciBmYW1pbHkgaW50ZWdlcl9vcHMgdXNpbmcgYnRyZWUgZHJvcCBvcGVy YXRvciAxIChpbnQ4YWxpYXMxLCBpbnQ4YWxpYXMxKTsKK3NldCBlbmFibGVfbmVzdGxvb3Ag PSBvZmY7CitzZXQgZW5hYmxlX2hhc2hqb2luID0gb2ZmOworc2V0IGVuYWJsZV9tZXJnZWpv aW4gPSBvbjsKKy0tIHNob3VsZCBmYWxsIGJhY2sgdG8gbm9uLW1lcmdlIHBsYW4gd2l0aG91 dCBlcnJvcgorZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgKiBmcm9tIGVjMSwKKyAg ICAoc2VsZWN0IGZmICsgMSBhcyB4IGZyb20KKyAgICAgICAoc2VsZWN0IGZmICsgMiBhcyBm ZiBmcm9tIGVjMQorICAgICAgICB1bmlvbiBhbGwKKyAgICAgICAgc2VsZWN0IGZmICsgMyBh cyBmZiBmcm9tIGVjMSkgc3MwCisgICAgIHVuaW9uIGFsbAorICAgICBzZWxlY3QgZmYgKyA0 IGFzIHggZnJvbSBlYzEpIGFzIHNzMQorICB3aGVyZSBzczEueCA9IGVjMS5mMSBhbmQgZWMx LmZmID0gNDI6OmludDg7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAg IC0+ICBJbmRleCBTY2FuIHVzaW5nIGVjMV9wa2V5IG9uIGVjMQorICAgICAgICAgSW5kZXgg Q29uZDogKGZmID0gJzQyJzo6YmlnaW50KQorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgZWMxX2V4cHIyIG9uIGVjMSBlYzFfMQorICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKCgoZmYgKyAyKSArIDEpID0gZWMxLmYxKQorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGVjMSBlYzFfMgorICAgICAgICAgICAgICAgRmlsdGVyOiAoKChmZiAr IDMpICsgMSkgPSBlYzEuZjEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBlYzFf ZXhwcjQgb24gZWMxIGVjMV8zCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoKGZmICsg NCkgPSBlYzEuZjEpCisoMTEgcm93cykKKworYWJvcnQ7CiAtLQogLS0gdGVzdCBoYW5kbGlu ZyBvZiBtZXJnZS9oYXNoIGNsYXVzZXMgdGhhdCBkbyBub3QgaGF2ZSB2YWxpZCBjb21tdXRh dG9ycwogLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VxdWl2Y2xhc3Mu c3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXF1aXZjbGFzcy5zcWwKaW5kZXggN2ZjMjE1 OTM0OWIuLmIwNmMyM2MwNTIwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9l cXVpdmNsYXNzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9lcXVpdmNsYXNzLnNx bApAQCAtMjg2LDYgKzI4NiwzMiBAQCBjcmVhdGUgdGVtcCB2aWV3IG92ZXJ2aWV3IGFzCiBl eHBsYWluIChjb3N0cyBvZmYpICAtLSB0aGlzIHNob3VsZCBub3QgcmVxdWlyZSBhIHNvcnQK ICAgc2VsZWN0ICogZnJvbSBvdmVydmlldyB3aGVyZSBzcWxpID0gJ2Zvbycgb3JkZXIgYnkg c3FsaTsKIAorLS0KKy0tIGNoZWNrIHRoYXQgaW5jb21wbGV0ZSBvcGZhbWlseSBkb2VzIG5v dCBjYXVzZSBtZXJnZSBqb2luIHRvIGNyYXNoLgorLS0gdGhlIDwgb3BlcmF0b3IgZm9yIGlu dDhhbGlhczEgaXMgdGVtcG9yYXJpbHkgcmVtb3ZlZCBmcm9tIHRoZSBvcGZhbWlseQorLS0g dG8gc2ltdWxhdGUgYW4gaW5jb21wbGV0ZSBkZWZpbml0aW9uIChlcXVhbGl0eSB3aXRob3V0 IG9yZGVyaW5nIG9wZXJhdG9ycykuCistLQorYmVnaW47CisKK2FsdGVyIG9wZXJhdG9yIGZh bWlseSBpbnRlZ2VyX29wcyB1c2luZyBidHJlZSBkcm9wIG9wZXJhdG9yIDEgKGludDhhbGlh czEsIGludDhhbGlhczEpOworCitzZXQgZW5hYmxlX25lc3Rsb29wID0gb2ZmOworc2V0IGVu YWJsZV9oYXNoam9pbiA9IG9mZjsKK3NldCBlbmFibGVfbWVyZ2Vqb2luID0gb247CisKKy0t IHNob3VsZCBmYWxsIGJhY2sgdG8gbm9uLW1lcmdlIHBsYW4gd2l0aG91dCBlcnJvcgorZXhw bGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgKiBmcm9tIGVjMSwKKyAgICAoc2VsZWN0IGZm ICsgMSBhcyB4IGZyb20KKyAgICAgICAoc2VsZWN0IGZmICsgMiBhcyBmZiBmcm9tIGVjMQor ICAgICAgICB1bmlvbiBhbGwKKyAgICAgICAgc2VsZWN0IGZmICsgMyBhcyBmZiBmcm9tIGVj MSkgc3MwCisgICAgIHVuaW9uIGFsbAorICAgICBzZWxlY3QgZmYgKyA0IGFzIHggZnJvbSBl YzEpIGFzIHNzMQorICB3aGVyZSBzczEueCA9IGVjMS5mMSBhbmQgZWMxLmZmID0gNDI6Omlu dDg7CisKK2Fib3J0OworCiAtLQogLS0gdGVzdCBoYW5kbGluZyBvZiBtZXJnZS9oYXNoIGNs YXVzZXMgdGhhdCBkbyBub3QgaGF2ZSB2YWxpZCBjb21tdXRhdG9ycwogLS0KLS0gCjIuNTMu MAoK --------------I0cLm04eZHSzCQarRvxQ0oKI--