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 1shCp3-00EaFj-Qt for pgsql-hackers@arkaria.postgresql.org; Thu, 22 Aug 2024 18:46:14 +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 1shCp1-004kT1-5f for pgsql-hackers@arkaria.postgresql.org; Thu, 22 Aug 2024 18:46:11 +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.94.2) (envelope-from ) id 1shCp0-004kSt-Mr for pgsql-hackers@lists.postgresql.org; Thu, 22 Aug 2024 18:46:11 +0000 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1shCot-000zdI-CZ for pgsql-hackers@lists.postgresql.org; Thu, 22 Aug 2024 18:46:10 +0000 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-42817bee9e8so8522035e9.3 for ; Thu, 22 Aug 2024 11:46:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724352363; x=1724957163; darn=lists.postgresql.org; h=to:subject:from:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=8/cSgq83HfZJ9eoC8uOTXinQpenKK9AII/lTTRpdLZ4=; b=YF0Ivoib4WeVIKE9Y8nzhX8wC/Hq+IV4G8JRTO9HLdGJlVB0iHuThF0vy4U5nWC+Y0 zxY2tYZGhgKIVXEKIRndcWgAIb/CjDz5yFC5XoVDiKIsQ7rrBbgXLLZ9neGUKOE72uul mW9w9uk4Rmh131a0bAmxn9v/1rNIYldlSw157cZ90IeBeLO3xobEsHu6ra+mRYl+wnI1 GZkL64T1EiIZR+uRDvsU1zy5vP2mOXoMMPOmWlI+lKtTNF4XgFGiybwqHMC6C9UA/hy0 R5hFTRXg4VsWy2Dv4Zdrq/tx/WVW6IYu8wV9bljkvWTbbj40faGdoH25mCs6B0FTHCKN BC2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724352363; x=1724957163; h=to:subject:from:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=8/cSgq83HfZJ9eoC8uOTXinQpenKK9AII/lTTRpdLZ4=; b=Njo/GvKqAyr46Ya9YhlAUumvFmrcdO07t8glli+NWJswsXDprhKUqYi/nbAarttQdG X1djWOAHtIhBMnsbxgFDxQq34U2csw8GlKUxeJoJ5ATrxav2fzbmJZlOjp4kkejM7sku eIda/WfSzM8v5DO/VSOZmvpeSdZb3kPP9xc2T+TMAM5Plac12hDlhW8wLIRyZfxKrbtO Gt9N+iM1B9cDKfQeEk0oAXojL7JUAvDM9GMlIQ9JEeRyY34WFj3gNlGPomz7tveuuRcS QzrA9zU3dkYz4R1Lmyvdi2VHQ+wHdoGWYr75Zx+ctd9mqzpLeR6k6tzFul5230LwCT4L IjzQ== X-Gm-Message-State: AOJu0YxP2IPpR4/dqf+J02xwEaIs+wq/fs0QrqHcSzUia6y/r35qnW3c uGFyV3JwaQe1B+WKr3EC7j+qeHfMNLc2p9+rZn21ilw3U6scDdaEAMOQDG8qN3C1sg== X-Google-Smtp-Source: AGHT+IEHmMn+tbU9xA4J6lReuQh75u4pvKiAeO9gUTa3ar2Pi60IEMWht1JsQABBiMahhxb2T+s8jA== X-Received: by 2002:a05:600c:5126:b0:426:5269:9827 with SMTP id 5b1f17b1804b1-42acc8a53cdmr135965e9.0.1724352362909; Thu, 22 Aug 2024 11:46:02 -0700 (PDT) Received: from ?IPV6:2a0c:5a83:4c09:9d00:e0ec:ccb3:c7cc:53a7? ([2a0c:5a83:4c09:9d00:e0ec:ccb3:c7cc:53a7]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-42ac5162322sm32311525e9.24.2024.08.22.11.46.02 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 22 Aug 2024 11:46:02 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------ciHYBCReX81cHXbF9b60WJK8" Message-ID: <8742aaa8-9519-4a1f-91bd-364aec65f5cf@gmail.com> Date: Thu, 22 Aug 2024 20:46:01 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US From: Andrei Lepikhov Subject: Consider the number of columns in the sort cost model To: PostgreSQL Hackers 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. --------------ciHYBCReX81cHXbF9b60WJK8 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, I would like to propose a slight elaboration of the sort cost model. In practice, we frequently see the choice of suboptimal sortings, which slump performance by 10-50%. The key reason here is the optimiser's blindness to the fact that sorting calls a comparison operator for each pair of attributes in the tuple. Just for example: SET work_mem = '128MB'; CREATE TABLE test ( x1 int,x2 int,x3 int,x4 int,x5 int,x6 int,x7 int,x8 int,payload text); INSERT INTO test (x1,x2,x3,x4,x5,x6,x7,x8,payload) ( SELECT 1,2,3,4,5,6,7,(1E5-x), 'abc'||x FROM generate_series(1,1E5) AS x); VACUUM ANALYZE test; Let's execute the following three queries: EXPLAIN (ANALYZE) SELECT * FROM test WHERE x1<9E4 ORDER BY x8; EXPLAIN (ANALYZE) SELECT * FROM test WHERE x1<9E4 ORDER BY x1,x2,x3,x8; EXPLAIN (ANALYZE) SELECT * FROM test WHERE x1<9E4 ORDER BY x1,x2,x3,x4,x5,x6,x7,x8; My laptop executes these three queries in 100ms, 300ms, and 560ms, respectively. At the same time, the costs of these query plans are similar. This corner case shows that sorting matters and in the corner case, dependence on the number of comparisons looks close to linear. The patch in the attachment is a simplistic attempt to differentiate these sortings by the number of columns. It is not ideal because comparisons depend on the duplicates in each column, but it may be the subject of further work. Even such a trivial model allows us to resolve the case like the below: CREATE INDEX ON test (x1,x2,x3,x8); EXPLAIN (ANALYZE) SELECT * FROM test WHERE x1<9E4 ORDER BY x1,x2,x3,x8; The current master will choose SeqScan for four columns as well as for a single column. With the model, the optimiser will understand that sorting four columns costs more than sorting a single column and switch to IndexScan. -- regards, Andrei Lepikhov --------------ciHYBCReX81cHXbF9b60WJK8 Content-Type: text/plain; charset=UTF-8; name="0001-Introduce-the-number-of-columns-in-the-cost-sort-mod.patch" Content-Disposition: attachment; filename*0="0001-Introduce-the-number-of-columns-in-the-cost-sort-mod.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA1ZjA0NzYxM2JlZmIyZmIyYzIwYzJiNzE3M2RkM2ExNzJmMWNmY2I4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmVpIFYuIExlcGlraG92IiA8bGVwaWhvdkBn bWFpbC5jb20+CkRhdGU6IFdlZCwgMjEgQXVnIDIwMjQgMTg6MDY6NDEgKzAyMDAKU3ViamVj dDogW1BBVENIXSBJbnRyb2R1Y2UgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBjb3N0 LXNvcnQgbW9kZWwuCgpUaGUgc29ydCBub2RlIGNhbGxzIHRoZSBjb21wYXJpc29uIG9wZXJh dG9yIGZvciBlYWNoIHBhaXIgb2YgYXR0cmlidXRlcyBmb3IKZWFjaCBjb3VwbGUgb2YgdHVw bGVzLiBIb3dldmVyLCB0aGUgY3VycmVudCBjb3N0IG1vZGVsIHVzZXMKYSAnMi4wKmNwdV9v cGVyYXRvcl9jb3N0JyBtdWx0aXBsaWVyLCB3aGljaCBwZXJmb3JtcyBzb21lIHNvcnQgb2Yg YXZlcmFnaW5nLgpUaGlzIHRlY2huaXF1ZSBjYW4gbGVhZCB0byBpbmNvcnJlY3QgZXN0aW1h dGlvbnMgd2hlbiBzb3J0aW5nIG9uIHRocmVlLCBmb3VyLApvciBtb3JlIGNvbHVtbnMsIHF1 aXRlIGNvbW1vbiBpbiBwcmFjdGljZS4KTW9yZW92ZXIsIGZ1cnRoZXIgZWxhYm9yYXRpb24g b2YgdGhlIG9wdGltaXNlciBmb3JtcyBtb3JlIHN0cmljdCByZXF1aXJlbWVudHMKZm9yIHRo ZSBiYWxhbmNlIG9mIHNvcnRpbmdzLCBhcyBjYXVzZWQgYnkgSW5jcmVtZW50YWxTb3J0LCBN ZXJnZUFwcGVuZCwgYW5kCk1lcmdlSm9pbi4KSW4gdGhpcyBwYXRjaCwgdGhlIG11bHRpcGxp ZXIgaXMgYSBsaW5lYXIgZnVuY3Rpb24gb2YgYSBudW1iZXIgb2YgY29sdW1ucy4KTWVtYmVy IDEuMCBuZWVkcyB0byBzbW9vdGggdGhlIGZhY3QgdGhhdCBkZXBlbmRlbmNlIG9uIHRoZSBu dW1iZXIgb2YgY29sdW1ucyBpcwp3ZWFrZXIgdGhhbiBsaW5lYXIuCkl0IGlzIGFuIGV4dHJl bWUgZm9ybXVsYS4gVGhlIG51bWJlciBvZiBjb21wYXJpc29ucyBkZXBlbmRzIG9uIHRoZSBk aXN0aW5jdAp2YWx1ZXMgaW4gZWFjaCBjb2x1bW4uIEFzIGEgVE9ETywgd2UgY2FuIG5hdGl2 ZWx5IGVsYWJvcmF0ZSB0aGlzIG1vZGVsIGJ5IHRoZQpuZXh0IHN0ZXAsIGludm9sdmluZyBk aXN0aW5jdCBzdGF0aXN0aWNzIHRvIG1ha2UgZXN0aW1hdGlvbnMgbW9yZSBwcmVjaXNlLgot LS0KIC4uLi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dCAgICB8IDE1 ICsrKy0tCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyAgICAgICAgICAg fCAgMiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyAgICAgICAg IHwgMzQgKysrKysrLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIu YyAgICAgICAgICB8ICAyICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5p b24uYyAgICAgICAgfCAgMiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5v ZGUuYyAgICAgICAgIHwgIDggKy0tCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oICAg ICAgICAgICAgICAgICAgfCAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dy ZWdhdGVzLm91dCAgICAgIHwgMTMgKystLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9q b2luLm91dCAgICAgICAgICAgIHwgMjAgKysrLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3BhcnRpdGlvbl9qb2luLm91dCAgfCAgOCArKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvdW5pb24ub3V0ICAgICAgICAgICB8IDY2ICsrKysrKysrKy0tLS0tLS0tLS0KIDEy IGZpbGVzIGNoYW5nZWQsIDk1IGluc2VydGlvbnMoKyksIDc5IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5v dXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0Cmlu ZGV4IGYzZWIwNTVlMmMuLjA2NTkwZmFmOWMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdy ZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKKysrIGIvY29udHJpYi9wb3N0Z3Jl c19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dApAQCAtOTk5NSwxMyArOTk5NSwxNiBA QCBTRUxFQ1QgdDEuYSx0Mi5iLHQzLmMgRlJPTSBmcHJ0MSB0MSBJTk5FUiBKT0lOIGZwcnQy IHQyIE9OICh0MS5hID0gdDIuYikgSU5ORVIgSgogLS0gbGVmdCBvdXRlciBqb2luICsgbnVs bGFibGUgY2xhdXNlCiBFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCiBTRUxFQ1QgdDEu YSx0Mi5iLHQyLmMgRlJPTSBmcHJ0MSB0MSBMRUZUIEpPSU4gKFNFTEVDVCAqIEZST00gZnBy dDIgV0hFUkUgYSA8IDEwKSB0MiBPTiAodDEuYSA9IHQyLmIgYW5kIHQxLmIgPSB0Mi5hKSBX SEVSRSB0MS5hIDwgMTAgT1JERVIgQlkgMSwyLDM7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gRm9yZWlnbiBTY2FuCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CiAgICBPdXRwdXQ6 IHQxLmEsIGZwcnQyLmIsIGZwcnQyLmMKLSAgIFJlbGF0aW9uczogKHB1YmxpYy5mdHBydDFf cDEgdDEpIExFRlQgSk9JTiAocHVibGljLmZ0cHJ0Ml9wMSBmcHJ0MikKLSAgIFJlbW90ZSBT UUw6IFNFTEVDVCByNS5hLCByNi5iLCByNi5jIEZST00gKHB1YmxpYy5mcHJ0MV9wMSByNSBM RUZUIEpPSU4gcHVibGljLmZwcnQyX3AxIHI2IE9OICgoKHI1LmEgPSByNi5iKSkgQU5EICgo cjUuYiA9IHI2LmEpKSBBTkQgKChyNi5hIDwgMTApKSkpIFdIRVJFICgocjUuYSA8IDEwKSkg T1JERVIgQlkgcjUuYSBBU0MgTlVMTFMgTEFTVCwgcjYuYiBBU0MgTlVMTFMgTEFTVCwgcjYu YyBBU0MgTlVMTFMgTEFTVAotKDQgcm93cykKKyAgIFNvcnQgS2V5OiB0MS5hLCBmcHJ0Mi5i LCBmcHJ0Mi5jCisgICAtPiAgRm9yZWlnbiBTY2FuCisgICAgICAgICBPdXRwdXQ6IHQxLmEs IGZwcnQyLmIsIGZwcnQyLmMKKyAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5mdHBydDFf cDEgdDEpIExFRlQgSk9JTiAocHVibGljLmZ0cHJ0Ml9wMSBmcHJ0MikKKyAgICAgICAgIFJl bW90ZSBTUUw6IFNFTEVDVCByNS5hLCByNi5iLCByNi5jIEZST00gKHB1YmxpYy5mcHJ0MV9w MSByNSBMRUZUIEpPSU4gcHVibGljLmZwcnQyX3AxIHI2IE9OICgoKHI1LmEgPSByNi5iKSkg QU5EICgocjUuYiA9IHI2LmEpKSBBTkQgKChyNi5hIDwgMTApKSkpIFdIRVJFICgocjUuYSA8 IDEwKSkKKyg3IHJvd3MpCiAKIFNFTEVDVCB0MS5hLHQyLmIsdDIuYyBGUk9NIGZwcnQxIHQx IExFRlQgSk9JTiAoU0VMRUNUICogRlJPTSBmcHJ0MiBXSEVSRSBhIDwgMTApIHQyIE9OICh0 MS5hID0gdDIuYiBhbmQgdDEuYiA9IHQyLmEpIFdIRVJFIHQxLmEgPCAxMCBPUkRFUiBCWSAx LDIsMzsKICBhIHwgYiB8ICBjICAgCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zk dy9wb3N0Z3Jlc19mZHcuYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5j CmluZGV4IGFkYzYyNTc2ZDEuLmY5YTJlODhhMTcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9z dGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bv c3RncmVzX2Zkdy5jCkBAIC0zNjY3LDcgKzM2NjcsNyBAQCBhZGp1c3RfZm9yZWlnbl9ncm91 cGluZ19wYXRoX2Nvc3QoUGxhbm5lckluZm8gKnJvb3QsCiAKIAkJY29zdF9zb3J0KCZzb3J0 X3BhdGgsCiAJCQkJICByb290LAotCQkJCSAgcGF0aGtleXMsCisJCQkJICBsaXN0X2xlbmd0 aChwYXRoa2V5cyksCiAJCQkJICAwLAogCQkJCSAgKnBfc3RhcnR1cF9jb3N0ICsgKnBfcnVu X2Nvc3QsCiAJCQkJICByZXRyaWV2ZWRfcm93cywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jCmluZGV4IGUxNTIzZDE1ZGYuLmE0ZDVlOTRiNjUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtNDkzLDYgKzQ5MywxMCBAQCBjb3N0 X2dhdGhlcl9tZXJnZShHYXRoZXJNZXJnZVBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290 LAogCUNvc3QJCWNvbXBhcmlzb25fY29zdDsKIAlkb3VibGUJCU47CiAJZG91YmxlCQlsb2dO OworCWludAkJCW5wYXRoa2V5cyA9IGxpc3RfbGVuZ3RoKCgoUGF0aCAqKSBwYXRoKS0+cGF0 aGtleXMpOworCWludAkJCWNtcE11bHRpcGxpZXIgPSBucGF0aGtleXM7CisKKwlBc3NlcnQo bnBhdGhrZXlzID4gMCk7CiAKIAkvKiBNYXJrIHRoZSBwYXRoIHdpdGggdGhlIGNvcnJlY3Qg cm93IGVzdGltYXRlICovCiAJaWYgKHJvd3MpCkBAIC01MTIsNyArNTE2LDcgQEAgY29zdF9n YXRoZXJfbWVyZ2UoR2F0aGVyTWVyZ2VQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwK IAlsb2dOID0gTE9HMihOKTsKIAogCS8qIEFzc3VtZWQgY29zdCBwZXIgdHVwbGUgY29tcGFy aXNvbiAqLwotCWNvbXBhcmlzb25fY29zdCA9IDIuMCAqIGNwdV9vcGVyYXRvcl9jb3N0Owor CWNvbXBhcmlzb25fY29zdCA9ICgxLjAgKyBjbXBNdWx0aXBsaWVyKSAqIGNwdV9vcGVyYXRv cl9jb3N0OwogCiAJLyogSGVhcCBjcmVhdGlvbiBjb3N0ICovCiAJc3RhcnR1cF9jb3N0ICs9 IGNvbXBhcmlzb25fY29zdCAqIE4gKiBsb2dOOwpAQCAtMTg5Niw3ICsxOTAwLDcgQEAgY29z dF9yZWN1cnNpdmVfdW5pb24oUGF0aCAqcnVuaW9uLCBQYXRoICpucnRlcm0sIFBhdGggKnJ0 ZXJtKQogICovCiBzdGF0aWMgdm9pZAogY29zdF90dXBsZXNvcnQoQ29zdCAqc3RhcnR1cF9j b3N0LCBDb3N0ICpydW5fY29zdCwKLQkJCSAgIGRvdWJsZSB0dXBsZXMsIGludCB3aWR0aCwK KwkJCSAgIGRvdWJsZSB0dXBsZXMsIGludCB3aWR0aCwgaW50IGNtcE11bHRpcGxpZXIsCiAJ CQkgICBDb3N0IGNvbXBhcmlzb25fY29zdCwgaW50IHNvcnRfbWVtLAogCQkJICAgZG91Ymxl IGxpbWl0X3R1cGxlcykKIHsKQEAgLTE5MTMsNyArMTkxNyw3IEBAIGNvc3RfdHVwbGVzb3J0 KENvc3QgKnN0YXJ0dXBfY29zdCwgQ29zdCAqcnVuX2Nvc3QsCiAJCXR1cGxlcyA9IDIuMDsK IAogCS8qIEluY2x1ZGUgdGhlIGRlZmF1bHQgY29zdC1wZXItY29tcGFyaXNvbiAqLwotCWNv bXBhcmlzb25fY29zdCArPSAyLjAgKiBjcHVfb3BlcmF0b3JfY29zdDsKKwljb21wYXJpc29u X2Nvc3QgKz0gKDEuMCArIGNtcE11bHRpcGxpZXIpICogY3B1X29wZXJhdG9yX2Nvc3Q7CiAK IAkvKiBEbyB3ZSBoYXZlIGEgdXNlZnVsIExJTUlUPyAqLwogCWlmIChsaW1pdF90dXBsZXMg PiAwICYmIGxpbWl0X3R1cGxlcyA8IHR1cGxlcykKQEAgLTIwODYsNyArMjA5MCw5IEBAIGNv c3RfaW5jcmVtZW50YWxfc29ydChQYXRoICpwYXRoLAogCSAqIGFyZSBlcXVhbC4KIAkgKi8K IAljb3N0X3R1cGxlc29ydCgmZ3JvdXBfc3RhcnR1cF9jb3N0LCAmZ3JvdXBfcnVuX2Nvc3Qs Ci0JCQkJICAgZ3JvdXBfdHVwbGVzLCB3aWR0aCwgY29tcGFyaXNvbl9jb3N0LCBzb3J0X21l bSwKKwkJCQkgICBncm91cF90dXBsZXMsIHdpZHRoLAorCQkJCSAgIGxpc3RfbGVuZ3RoKHBh dGhrZXlzKSwKKwkJCQkgICBjb21wYXJpc29uX2Nvc3QsIHNvcnRfbWVtLAogCQkJCSAgIGxp bWl0X3R1cGxlcyk7CiAKIAkvKgpAQCAtMjExMCw3ICsyMTE2LDcgQEAgY29zdF9pbmNyZW1l bnRhbF9zb3J0KFBhdGggKnBhdGgsCiAJICogZGV0ZWN0IHRoZSBzb3J0IGdyb3Vwcy4gVGhp cyBpcyByb3VnaGx5IGVxdWFsIHRvIG9uZSBleHRyYSBjb3B5IGFuZAogCSAqIGNvbXBhcmlz b24gcGVyIHR1cGxlLgogCSAqLwotCXJ1bl9jb3N0ICs9IChjcHVfdHVwbGVfY29zdCArIGNv bXBhcmlzb25fY29zdCkgKiBpbnB1dF90dXBsZXM7CisJcnVuX2Nvc3QgKz0gKGNwdV90dXBs ZV9jb3N0ICsgKGxpc3RfbGVuZ3RoKHBhdGhrZXlzKSArIDEpICogY29tcGFyaXNvbl9jb3N0 KSAqIGlucHV0X3R1cGxlczsKIAogCS8qCiAJICogQWRkaXRpb25hbGx5LCB3ZSBjaGFyZ2Ug ZG91YmxlIGNwdV90dXBsZV9jb3N0IGZvciBlYWNoIGlucHV0IGdyb3VwIHRvCkBAIC0yMTQy LDcgKzIxNDgsNyBAQCBjb3N0X2luY3JlbWVudGFsX3NvcnQoUGF0aCAqcGF0aCwKICAqLwog dm9pZAogY29zdF9zb3J0KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAotCQkgIExp c3QgKnBhdGhrZXlzLCBpbnQgaW5wdXRfZGlzYWJsZWRfbm9kZXMsCisJCSAgaW50IG5wYXRo a2V5cywgaW50IGlucHV0X2Rpc2FibGVkX25vZGVzLAogCQkgIENvc3QgaW5wdXRfY29zdCwg ZG91YmxlIHR1cGxlcywgaW50IHdpZHRoLAogCQkgIENvc3QgY29tcGFyaXNvbl9jb3N0LCBp bnQgc29ydF9tZW0sCiAJCSAgZG91YmxlIGxpbWl0X3R1cGxlcykKQEAgLTIxNTAsOSArMjE1 NiwxMiBAQCBjb3N0X3NvcnQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiB7CiAJ Q29zdAkJc3RhcnR1cF9jb3N0OwogCUNvc3QJCXJ1bl9jb3N0OworCWludAkJCWNtcE11bHRp cGxpZXIgPSBucGF0aGtleXM7CisKKwlBc3NlcnQobnBhdGhrZXlzID4gMCk7CiAKIAljb3N0 X3R1cGxlc29ydCgmc3RhcnR1cF9jb3N0LCAmcnVuX2Nvc3QsCi0JCQkJICAgdHVwbGVzLCB3 aWR0aCwKKwkJCQkgICB0dXBsZXMsIHdpZHRoLCBjbXBNdWx0aXBsaWVyLAogCQkJCSAgIGNv bXBhcmlzb25fY29zdCwgc29ydF9tZW0sCiAJCQkJICAgbGltaXRfdHVwbGVzKTsKIApAQCAt MjMyMSw3ICsyMzMwLDcgQEAgY29zdF9hcHBlbmQoQXBwZW5kUGF0aCAqYXBhdGgpCiAJCQkJ CSAqLwogCQkJCQljb3N0X3NvcnQoJnNvcnRfcGF0aCwKIAkJCQkJCQkgIE5VTEwsIC8qIGRv ZXNuJ3QgY3VycmVudGx5IG5lZWQgcm9vdCAqLwotCQkJCQkJCSAgcGF0aGtleXMsCisJCQkJ CQkJICBsaXN0X2xlbmd0aChwYXRoa2V5cyksCiAJCQkJCQkJICBzdWJwYXRoLT5kaXNhYmxl ZF9ub2RlcywKIAkJCQkJCQkgIHN1YnBhdGgtPnRvdGFsX2Nvc3QsCiAJCQkJCQkJICBzdWJw YXRoLT5yb3dzLApAQCAtMjQ0MCw2ICsyNDQ5LDkgQEAgY29zdF9tZXJnZV9hcHBlbmQoUGF0 aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJQ29zdAkJY29tcGFyaXNvbl9jb3N0Owog CWRvdWJsZQkJTjsKIAlkb3VibGUJCWxvZ047CisJaW50CQkJY21wTXVsdGlwbGllciA9IGxp c3RfbGVuZ3RoKHBhdGhrZXlzKTsKKworCUFzc2VydChwYXRoa2V5cyAhPSBOSUwpOwogCiAJ LyoKIAkgKiBBdm9pZCBsb2coMCkuLi4KQEAgLTI0NDgsNyArMjQ2MCw3IEBAIGNvc3RfbWVy Z2VfYXBwZW5kKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCWxvZ04gPSBMT0cy KE4pOwogCiAJLyogQXNzdW1lZCBjb3N0IHBlciB0dXBsZSBjb21wYXJpc29uICovCi0JY29t cGFyaXNvbl9jb3N0ID0gMi4wICogY3B1X29wZXJhdG9yX2Nvc3Q7CisJY29tcGFyaXNvbl9j b3N0ID0gKDEuMCArIGNtcE11bHRpcGxpZXIpICogY3B1X29wZXJhdG9yX2Nvc3Q7CiAKIAkv KiBIZWFwIGNyZWF0aW9uIGNvc3QgKi8KIAlzdGFydHVwX2Nvc3QgKz0gY29tcGFyaXNvbl9j b3N0ICogTiAqIGxvZ047CkBAIC0zNjg0LDcgKzM2OTYsNyBAQCBpbml0aWFsX2Nvc3RfbWVy Z2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3NwYWNl LAogCXsKIAkJY29zdF9zb3J0KCZzb3J0X3BhdGgsCiAJCQkJICByb290LAotCQkJCSAgb3V0 ZXJzb3J0a2V5cywKKwkJCQkgIGxpc3RfbGVuZ3RoKG91dGVyc29ydGtleXMpLAogCQkJCSAg b3V0ZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXMsCiAJCQkJICBvdXRlcl9wYXRoLT50b3RhbF9j b3N0LAogCQkJCSAgb3V0ZXJfcGF0aF9yb3dzLApAQCAtMzcxMyw3ICszNzI1LDcgQEAgaW5p dGlhbF9jb3N0X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwgSm9pbkNvc3RXb3Jrc3Bh Y2UgKndvcmtzcGFjZSwKIAl7CiAJCWNvc3Rfc29ydCgmc29ydF9wYXRoLAogCQkJCSAgcm9v dCwKLQkJCQkgIGlubmVyc29ydGtleXMsCisJCQkJICBsaXN0X2xlbmd0aChpbm5lcnNvcnRr ZXlzKSwKIAkJCQkgIGlubmVyX3BhdGgtPmRpc2FibGVkX25vZGVzLAogCQkJCSAgaW5uZXJf cGF0aC0+dG90YWxfY29zdCwKIAkJCQkgIGlubmVyX3BhdGhfcm93cywKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwppbmRleCA4ZTBlNTk3N2E5Li44N2I3Mjc3 ZTI2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFu LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC01 NDUzLDcgKzU0NTMsNyBAQCBsYWJlbF9zb3J0X3dpdGhfY29zdHNpemUoUGxhbm5lckluZm8g KnJvb3QsIFNvcnQgKnBsYW4sIGRvdWJsZSBsaW1pdF90dXBsZXMpCiAJICovCiAJQXNzZXJ0 KElzQShwbGFuLCBTb3J0KSk7CiAKLQljb3N0X3NvcnQoJnNvcnRfcGF0aCwgcm9vdCwgTklM LAorCWNvc3Rfc29ydCgmc29ydF9wYXRoLCByb290LCBsaXN0X2xlbmd0aChsZWZ0dHJlZS0+ dGFyZ2V0bGlzdCksCiAJCQkgIGxlZnR0cmVlLT50b3RhbF9jb3N0LAogCQkJICBwbGFuLT5w bGFuLmRpc2FibGVkX25vZGVzLAogCQkJICBsZWZ0dHJlZS0+cGxhbl9yb3dzLApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGI1ODI3ZDM5ODAuLjE0OTMwYzgy MTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwor KysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTY3NDcsNyAr Njc0Nyw3IEBAIHBsYW5fY2x1c3Rlcl91c2Vfc29ydChPaWQgdGFibGVPaWQsIE9pZCBpbmRl eE9pZCkKIAogCS8qIEVzdGltYXRlIHRoZSBjb3N0IG9mIHNlcSBzY2FuICsgc29ydCAqLwog CXNlcVNjYW5QYXRoID0gY3JlYXRlX3NlcXNjYW5fcGF0aChyb290LCByZWwsIE5VTEwsIDAp OwotCWNvc3Rfc29ydCgmc2VxU2NhbkFuZFNvcnRQYXRoLCByb290LCBOSUwsCisJY29zdF9z b3J0KCZzZXFTY2FuQW5kU29ydFBhdGgsIHJvb3QsIHJlbC0+bWF4X2F0dHIsCiAJCQkgIHNl cVNjYW5QYXRoLT5kaXNhYmxlZF9ub2RlcywKIAkJCSAgc2VxU2NhblBhdGgtPnRvdGFsX2Nv c3QsIHJlbC0+dHVwbGVzLCByZWwtPnJlbHRhcmdldC0+d2lkdGgsCiAJCQkgIGNvbXBhcmlz b25Db3N0LCBtYWludGVuYW5jZV93b3JrX21lbSwgLTEuMCk7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wcmVwL3ByZXB1bmlvbi5jCmluZGV4IGEwYmFmNmQ0YTEuLjBkNTFlMWY2MTIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCkBAIC0xMzU4LDcgKzEz NTgsNyBAQCBjaG9vc2VfaGFzaGVkX3NldG9wKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpn cm91cENsYXVzZXMsCiAJc29ydGVkX3Auc3RhcnR1cF9jb3N0ID0gaW5wdXRfcGF0aC0+c3Rh cnR1cF9jb3N0OwogCXNvcnRlZF9wLnRvdGFsX2Nvc3QgPSBpbnB1dF9wYXRoLT50b3RhbF9j b3N0OwogCS8qIFhYWCBjb3N0X3NvcnQgZG9lc24ndCBhY3R1YWxseSBsb29rIGF0IHBhdGhr ZXlzLCBzbyBqdXN0IHBhc3MgTklMICovCi0JY29zdF9zb3J0KCZzb3J0ZWRfcCwgcm9vdCwg TklMLCBzb3J0ZWRfcC5kaXNhYmxlZF9ub2RlcywKKwljb3N0X3NvcnQoJnNvcnRlZF9wLCBy b290LCBsaXN0X2xlbmd0aChpbnB1dF9wYXRoLT5wYXRodGFyZ2V0LT5leHBycyksIHNvcnRl ZF9wLmRpc2FibGVkX25vZGVzLAogCQkJICBzb3J0ZWRfcC50b3RhbF9jb3N0LAogCQkJICBp bnB1dF9wYXRoLT5yb3dzLCBpbnB1dF9wYXRoLT5wYXRodGFyZ2V0LT53aWR0aCwKIAkJCSAg MC4wLCB3b3JrX21lbSwgLTEuMCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5v ZGUuYwppbmRleCBmYzk3YmY2ZWUyLi4zOTNmOTkzMTc2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BhdGhub2RlLmMKQEAgLTE1MzcsNyArMTUzNyw3IEBAIGNyZWF0ZV9tZXJn ZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAogCQkJY29zdF9zb3J0KCZzb3J0 X3BhdGgsCiAJCQkJCSAgcm9vdCwKLQkJCQkJICBwYXRoa2V5cywKKwkJCQkJICBsaXN0X2xl bmd0aChwYXRoa2V5cyksCiAJCQkJCSAgc3VicGF0aC0+ZGlzYWJsZWRfbm9kZXMsCiAJCQkJ CSAgc3VicGF0aC0+dG90YWxfY29zdCwKIAkJCQkJICBzdWJwYXRoLT5yb3dzLApAQCAtMTg2 Niw3ICsxODY2LDcgQEAgY3JlYXRlX3VuaXF1ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsIFBhdGggKnN1YnBhdGgsCiAJCS8qCiAJCSAqIEVzdGltYXRlIGNv c3QgZm9yIHNvcnQrdW5pcXVlIGltcGxlbWVudGF0aW9uCiAJCSAqLwotCQljb3N0X3NvcnQo JnNvcnRfcGF0aCwgcm9vdCwgTklMLAorCQljb3N0X3NvcnQoJnNvcnRfcGF0aCwgcm9vdCwg bGlzdF9sZW5ndGgoc3VicGF0aC0+cGF0aHRhcmdldC0+ZXhwcnMpLAogCQkJCSAgc3VicGF0 aC0+ZGlzYWJsZWRfbm9kZXMsCiAJCQkJICBzdWJwYXRoLT50b3RhbF9jb3N0LAogCQkJCSAg cmVsLT5yb3dzLApAQCAtMzEwMSw3ICszMTAxLDcgQEAgY3JlYXRlX3NvcnRfcGF0aChQbGFu bmVySW5mbyAqcm9vdCwKIAogCXBhdGhub2RlLT5zdWJwYXRoID0gc3VicGF0aDsKIAotCWNv c3Rfc29ydCgmcGF0aG5vZGUtPnBhdGgsIHJvb3QsIHBhdGhrZXlzLAorCWNvc3Rfc29ydCgm cGF0aG5vZGUtPnBhdGgsIHJvb3QsIGxpc3RfbGVuZ3RoKHBhdGhrZXlzKSwKIAkJCSAgc3Vi cGF0aC0+ZGlzYWJsZWRfbm9kZXMsCiAJCQkgIHN1YnBhdGgtPnRvdGFsX2Nvc3QsCiAJCQkg IHN1YnBhdGgtPnJvd3MsCkBAIC0zNDM2LDcgKzM0MzYsNyBAQCBjcmVhdGVfZ3JvdXBpbmdz ZXRzX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQllbHNlCiAJCQl7CiAJCQkJLyogQWNj b3VudCBmb3IgY29zdCBvZiBzb3J0LCBidXQgZG9uJ3QgY2hhcmdlIGlucHV0IGNvc3QgYWdh aW4gKi8KLQkJCQljb3N0X3NvcnQoJnNvcnRfcGF0aCwgcm9vdCwgTklMLCAwLAorCQkJCWNv c3Rfc29ydCgmc29ydF9wYXRoLCByb290LCBsaXN0X2xlbmd0aChzdWJwYXRoLT5wYXRodGFy Z2V0LT5leHBycyksIDAsCiAJCQkJCQkgIDAuMCwKIAkJCQkJCSAgc3VicGF0aC0+cm93cywK IAkJCQkJCSAgc3VicGF0aC0+cGF0aHRhcmdldC0+d2lkdGgsCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3Qu aAppbmRleCA4NTRhNzgyOTQ0Li5iODExM2I4NzQ4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgK QEAgLTEwOCw3ICsxMDgsNyBAQCBleHRlcm4gdm9pZCBjb3N0X3Jlc3VsdHNjYW4oUGF0aCAq cGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJUmVsT3B0SW5mbyAqYmFzZXJlbCwg UGFyYW1QYXRoSW5mbyAqcGFyYW1faW5mbyk7CiBleHRlcm4gdm9pZCBjb3N0X3JlY3Vyc2l2 ZV91bmlvbihQYXRoICpydW5pb24sIFBhdGggKm5ydGVybSwgUGF0aCAqcnRlcm0pOwogZXh0 ZXJuIHZvaWQgY29zdF9zb3J0KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAotCQkJ CQkgIExpc3QgKnBhdGhrZXlzLCBpbnQgZGlzYWJsZWRfbm9kZXMsCisJCQkJCSAgaW50IG5w YXRoa2V5cywgaW50IGRpc2FibGVkX25vZGVzLAogCQkJCQkgIENvc3QgaW5wdXRfY29zdCwg ZG91YmxlIHR1cGxlcywgaW50IHdpZHRoLAogCQkJCQkgIENvc3QgY29tcGFyaXNvbl9jb3N0 LCBpbnQgc29ydF9tZW0sCiAJCQkJCSAgZG91YmxlIGxpbWl0X3R1cGxlcyk7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVzLm91dAppbmRleCA4YWMxM2I1NjJjLi4y NTAzYWQwM2ZiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3Jl Z2F0ZXMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5v dXQKQEAgLTMwMTYsMTcgKzMwMTYsMTggQEAgQU5BTFlaRSBhZ2dfc29ydF9vcmRlcjsKIEVY UExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCBhcnJheV9hZ2coYzEgT1JERVIgQlkgYzIpLGMy CiBGUk9NIGFnZ19zb3J0X29yZGVyIFdIRVJFIGMyIDwgMTAwIEdST1VQIEJZIGMxIE9SREVS IEJZIDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBTb3J0CiAg ICBTb3J0IEtleTogYzIKICAgIC0+ICBHcm91cEFnZ3JlZ2F0ZQogICAgICAgICAgR3JvdXAg S2V5OiBjMQotICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgIC0+ICBJbmNyZW1lbnRhbCBT b3J0CiAgICAgICAgICAgICAgICBTb3J0IEtleTogYzEsIGMyCi0gICAgICAgICAgICAgICAt PiAgSW5kZXggU2NhbiB1c2luZyBhZ2dfc29ydF9vcmRlcl9jMl9pZHggb24gYWdnX3NvcnRf b3JkZXIKLSAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChjMiA8IDEwMCkKLSg4 IHJvd3MpCisgICAgICAgICAgICAgICBQcmVzb3J0ZWQgS2V5OiBjMQorICAgICAgICAgICAg ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYWdnX3NvcnRfb3JkZXJfcGtleSBvbiBhZ2dfc29y dF9vcmRlcgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYzIgPCAxMDApCisoOSBy b3dzKQogCiBEUk9QIFRBQkxFIGFnZ19zb3J0X29yZGVyIENBU0NBREU7CiBEUk9QIFRBQkxF IGJ0ZzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CmluZGV4IDMxZmI3ZDE0MmUu LmVmYmQ1ZTAxODIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9p bi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dApAQCAtNTcy NiwxOCArNTcyNiwyMCBAQCBzZWxlY3QgZC4qIGZyb20gZCBsZWZ0IGpvaW4gKHNlbGVjdCAq IGZyb20gYiBncm91cCBieSBiLmlkLCBiLmNfaWQpIHMKIGV4cGxhaW4gKGNvc3RzIG9mZikK IHNlbGVjdCBkLiogZnJvbSBkIGxlZnQgam9pbiAoc2VsZWN0IGRpc3RpbmN0ICogZnJvbSBi KSBzCiAgIG9uIGQuYSA9IHMuaWQ7Ci0gICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBNZXJn ZSBSaWdodCBKb2luCi0gICBNZXJnZSBDb25kOiAoYi5pZCA9IGQuYSkKLSAgIC0+ICBVbmlx dWUKLSAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICBTb3J0IEtleTogYi5pZCwg Yi5jX2lkCi0gICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYgorICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBMZWZ0IEpvaW4KKyAgIE1lcmdl IENvbmQ6IChkLmEgPSBzLmlkKQogICAgLT4gIFNvcnQKICAgICAgICAgIFNvcnQgS2V5OiBk LmEKICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBkCi0oOSByb3dzKQorICAgLT4gIFNvcnQK KyAgICAgICAgIFNvcnQgS2V5OiBzLmlkCisgICAgICAgICAtPiAgU3VicXVlcnkgU2NhbiBv biBzCisgICAgICAgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg ICAgICAgR3JvdXAgS2V5OiBiLmlkLCBiLmNfaWQKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBiCisoMTEgcm93cykKIAogLS0gam9pbiByZW1vdmFsIGlzIG5vdCBw b3NzaWJsZSBoZXJlCiBleHBsYWluIChjb3N0cyBvZmYpCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcGFydGl0aW9uX2pvaW4ub3V0CmluZGV4IDEwOGY5ZWNiNDQuLjg4NmRj NTU5YTUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9u X2pvaW4ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2pv aW4ub3V0CkBAIC0xMjc0LDkgKzEyNzQsMTEgQEAgRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VM RUNUIHQxLmEsIHQxLmMsIHQyLmIsIHQyLmMsIHQzLmEgKyB0My5iLCB0My5jIEZST00gKHBy dDEgdDEgTEVGVCBKT0lOIHBydDIgdDIgT04gdDEuYSA9IHQyLmIpIFJJR0hUIEpPSU4gcHJ0 MV9lIHQzIE9OICh0MS5hID0gKHQzLmEgKyB0My5iKS8yKSBXSEVSRSB0My5jID0gMCBPUkRF UiBCWSB0MS5hLCB0Mi5iLCB0My5hICsgdDMuYjsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBTb3J0CisgSW5jcmVtZW50YWwgU29ydAogICAg U29ydCBLZXk6IHQxLmEsIHQyLmIsICgodDMuYSArIHQzLmIpKQotICAgLT4gIEFwcGVuZAor ICAgUHJlc29ydGVkIEtleTogdDEuYQorICAgLT4gIE1lcmdlIEFwcGVuZAorICAgICAgICAg U29ydCBLZXk6IHQxLmEKICAgICAgICAgIC0+ICBNZXJnZSBMZWZ0IEpvaW4KICAgICAgICAg ICAgICAgIE1lcmdlIENvbmQ6ICh0MV8xLmEgPSB0Ml8xLmIpCiAgICAgICAgICAgICAgICAt PiAgU29ydApAQCAtMTMyNSw3ICsxMzI3LDcgQEAgU0VMRUNUIHQxLmEsIHQxLmMsIHQyLmIs IHQyLmMsIHQzLmEgKyB0My5iLCB0My5jIEZST00gKHBydDEgdDEgTEVGVCBKT0lOIHBydDIg dDIKICAgICAgICAgICAgICAgIC0+ICBTb3J0CiAgICAgICAgICAgICAgICAgICAgICBTb3J0 IEtleTogdDJfMy5iCiAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0 Ml9wMyB0Ml8zCi0oNTEgcm93cykKKyg1MyByb3dzKQogCiBTRUxFQ1QgdDEuYSwgdDEuYywg dDIuYiwgdDIuYywgdDMuYSArIHQzLmIsIHQzLmMgRlJPTSAocHJ0MSB0MSBMRUZUIEpPSU4g cHJ0MiB0MiBPTiB0MS5hID0gdDIuYikgUklHSFQgSk9JTiBwcnQxX2UgdDMgT04gKHQxLmEg PSAodDMuYSArIHQzLmIpLzIpIFdIRVJFIHQzLmMgPSAwIE9SREVSIEJZIHQxLmEsIHQyLmIs IHQzLmEgKyB0My5iOwogICBhICB8ICBjICAgfCAgYiAgfCAgYyAgIHwgP2NvbHVtbj8gfCBj IApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91bmlvbi5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VuaW9uLm91dAppbmRleCAwNDU2ZDQ4YzkzLi5l YzUyMjE1YWU0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VuaW9u Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VuaW9uLm91dApAQCAtMTIy NSwxOCArMTIyNSwxNyBAQCBTRUxFQ1QgKiBGUk9NCiAgICBTRUxFQ1QgMiBBUyB0LCA0IEFT IHgpIHNzCiBXSEVSRSB4IDwgNAogT1JERVIgQlkgeDsKLSAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgU29ydAogICAgU29ydCBLZXk6ICgyKQotICAgLT4gIFVuaXF1ZQot ICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoMSksICgyKQot ICAgICAgICAgICAgICAgLT4gIEFwcGVuZAotICAgICAgICAgICAgICAgICAgICAgLT4gIFJl c3VsdAotICAgICAgICAgICAgICAgICAgICAgLT4gIFJlc3VsdAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgT25lLVRpbWUgRmlsdGVyOiBmYWxzZQotKDkgcm93cykKKyAgIC0+ICBI YXNoQWdncmVnYXRlCisgICAgICAgICBHcm91cCBLZXk6ICgxKSwgKDIpCisgICAgICAgICAt PiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgUmVzdWx0CisgICAgICAgICAgICAgICAt PiAgUmVzdWx0CisgICAgICAgICAgICAgICAgICAgICBPbmUtVGltZSBGaWx0ZXI6IGZhbHNl CisoOCByb3dzKQogCiBTRUxFQ1QgKiBGUk9NCiAgIChTRUxFQ1QgMSBBUyB0LCAyIEFTIHgK QEAgLTEyOTAsMTkgKzEyODksMTggQEAgU0VMRUNUICogRlJPTQogICAgU0VMRUNUIDIgQVMg dCwgNCBBUyB4KSBzcwogV0hFUkUgeCA+IDMKIE9SREVSIEJZIHg7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFNv cnQKICAgIFNvcnQgS2V5OiBzcy54CiAgICAtPiAgU3VicXVlcnkgU2NhbiBvbiBzcwogICAg ICAgICAgRmlsdGVyOiAoc3MueCA+IDMpCi0gICAgICAgICAtPiAgVW5pcXVlCi0gICAgICAg ICAgICAgICAtPiAgU29ydAotICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6ICgxKSwg KCgocmFuZG9tKCkgKiAnMyc6OmRvdWJsZSBwcmVjaXNpb24pKTo6aW50ZWdlcikKLSAgICAg ICAgICAgICAgICAgICAgIC0+ICBBcHBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBSZXN1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBSZXN1bHQKLSgx MCByb3dzKQorICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIEdy b3VwIEtleTogKDEpLCAoKChyYW5kb20oKSAqICczJzo6ZG91YmxlIHByZWNpc2lvbikpOjpp bnRlZ2VyKQorICAgICAgICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAg ICAgLT4gIFJlc3VsdAorICAgICAgICAgICAgICAgICAgICAgLT4gIFJlc3VsdAorKDkgcm93 cykKIAogU0VMRUNUICogRlJPTQogICAoU0VMRUNUIDEgQVMgdCwgKHJhbmRvbSgpKjMpOjpp bnQgQVMgeApAQCAtMTMyMywyNCArMTMyMSwyMiBAQCBzZWxlY3QgZGlzdGluY3QgcTEgZnJv bQogICAgdW5pb24gYWxsCiAgICBzZWxlY3QgZGlzdGluY3QgKiBmcm9tIGludDhfdGJsIGk4 Mikgc3MKIHdoZXJlIHEyID0gcTI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gVW5pcXVlCi0gICAtPiAgTWVy Z2UgQXBwZW5kCi0gICAgICAgICBTb3J0IEtleTogIipTRUxFQ1QqIDEiLnExCisgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaEFn Z3JlZ2F0ZQorICAgR3JvdXAgS2V5OiAiKlNFTEVDVCogMSIucTEKKyAgIC0+ICBBcHBlbmQK ICAgICAgICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9uICIqU0VMRUNUKiAxIgotICAgICAgICAg ICAgICAgLT4gIFVuaXF1ZQotICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBpODEucTEsIGk4MS5xMgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGludDhfdGJsIGk4MQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAocTIgSVMgTk9UIE5VTEwp CisgICAgICAgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAg ICAgR3JvdXAgS2V5OiBpODEucTEsIGk4MS5xMgorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGludDhfdGJsIGk4MQorICAgICAgICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAocTIgSVMgTk9UIE5VTEwpCiAgICAgICAgICAtPiAgU3VicXVlcnkgU2NhbiBv biAiKlNFTEVDVCogMiIKLSAgICAgICAgICAgICAgIC0+ICBVbmlxdWUKLSAgICAgICAgICAg ICAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtl eTogaTgyLnExLCBpODIucTIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBpbnQ4X3RibCBpODIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKHEyIElTIE5PVCBOVUxMKQotKDE1IHJvd3MpCisgICAgICAgICAgICAgICAt PiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBpODIu cTEsIGk4Mi5xMgorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGludDhf dGJsIGk4MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAocTIgSVMgTk9U IE5VTEwpCisoMTMgcm93cykKIAogc2VsZWN0IGRpc3RpbmN0IHExIGZyb20KICAgKHNlbGVj dCBkaXN0aW5jdCAqIGZyb20gaW50OF90YmwgaTgxCi0tIAoyLjQ2LjAKCg== --------------ciHYBCReX81cHXbF9b60WJK8--