Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pKhxw-0007pb-V1 for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Jan 2023 15:45:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pKhxv-0006aY-Rd for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Jan 2023 15:45:35 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pKhxv-0006aP-8S for pgsql-hackers@lists.postgresql.org; Wed, 25 Jan 2023 15:45:35 +0000 Received: from mail-yb1-xb31.google.com ([2607:f8b0:4864:20::b31]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pKhxl-0003HK-4O for pgsql-hackers@lists.postgresql.org; Wed, 25 Jan 2023 15:45:34 +0000 Received: by mail-yb1-xb31.google.com with SMTP id m199so7739383ybm.4 for ; Wed, 25 Jan 2023 07:45:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=timescale.com; s=google; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=evzOYOvz0iB0MfydN6IkHX5TwqNlx3y5bEwAKBEaDoI=; b=M1FDLug6MKPyHnTdRP3dTWzGr/3fjg+zuucIR+gKXnxU/ucEFzNW/ac/DzlhTFGXW4 Y2y53qXKpxANX5sEyHDIMfHoRFPJ5mkmR0+CFFvDZKgLKkx6q/i6q4Mn6y6C55T0B3V9 KJp5nptCWy06vuhM31/+8c+EmTppVnFJ194imZoEtBdnog0AmNns+LOmK4FfJAgHe0d1 a5xDtf8FvYI0ePGZ/R7JgZPzDbI89/CPaO+9HCYr0751dIf1oogqt1+/NaR6/Qx3WP8x n9fQv5QT4Wq2DgSdPGidnb86cJUmXtL9yyV1g2tCC7kHheM3FZ49LgGZ/Z+6vrOlC975 Tmlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=evzOYOvz0iB0MfydN6IkHX5TwqNlx3y5bEwAKBEaDoI=; b=SVuIotqc+Ty1mrfHrHj1iHgjooi+CfqPsfSBC10w89DO5J0F0Qx5u7r9zmTpynIQYp ZdkOb3uLbpPjBJz3BFIduJxDbydjjA5FM9D0m3psZjVAk5Z6tii6Z/VzE9fJHrCyMUom XOXx/XBHeB/Y/MUo9YnT2kiNiMd9mDITshe/FX8LSLfsbYr1DB0+kBax8Fk9Qzp3Q3yd 94Wx/TM24NV4vQc5aUENvZOFZJWTdioeTVAPvfNtfBM8fA5R/l3YqFNsrlDibzlh+4Sd pFu108AE2tVFnbkkdvLiMBXzNgSXV8BOn80GWz0uLGOUWlXpISDqFJjqDmusmMsrQyRn K5Aw== X-Gm-Message-State: AFqh2krMlP1HrCuZ1ZqHrhzXv7CpDnzG+zW1+wqipCvCRikupQKr3diR HjoJW9GojBv4nCS6m9vzx0U4q3hm2YjeTZPTHOxgb3unStKtRBzKtdM= X-Google-Smtp-Source: AMrXdXuncftwnEbWNd2kFd7m0JjDECXzsTQ+w3UJHrO9ktjYjYHbq/eM9eiYNPi3+15NuH2O5qMhSyYMMXkxqVOWGk8= X-Received: by 2002:a25:8d06:0:b0:7b4:bdd7:e631 with SMTP id n6-20020a258d06000000b007b4bdd7e631mr3500953ybl.507.1674661524095; Wed, 25 Jan 2023 07:45:24 -0800 (PST) MIME-Version: 1.0 From: Aleksander Alekseev Date: Wed, 25 Jan 2023 18:45:12 +0300 Message-ID: Subject: [PATCH] Make ON CONFLICT DO NOTHING and ON CONFLICT DO UPDATE consistent To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000004385f505f3188513" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004385f505f3188513 Content-Type: text/plain; charset="UTF-8" Hi hackers, Currently we allow self-conflicting inserts for ON CONFLICT DO NOTHING: ``` CREATE TABLE t (a INT UNIQUE, b INT); INSERT INTO t VALUES (1,1), (1,2) ON CONFLICT DO NOTHING; -- succeeds, inserting the first row and ignoring the second ``` ... but not for ON CONFLICT .. DO UPDATE: ``` INSERT INTO t VALUES (1,1), (1,2) ON CONFLICT (a) DO UPDATE SET b = 0; ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time HINT: Ensure that no rows proposed for insertion within the same command have duplicate constrained values. ``` Tom pointed out in 2016 that this is actually a bug [1] and I agree. The proposed patch fixes this. [1]: https://www.postgresql.org/message-id/22438.1477265185%40sss.pgh.pa.us -- Best regards, Aleksander Alekseev --0000000000004385f505f3188513 Content-Type: application/octet-stream; name="v1-0001-Make-ON-CONFLICT-DO-NOTHING-and-ON-CONFLICT-DO-UP.patch" Content-Disposition: attachment; filename="v1-0001-Make-ON-CONFLICT-DO-NOTHING-and-ON-CONFLICT-DO-UP.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ldbttkwv0 RnJvbSA5N2NlYzYyMzJiZGY4Y2NhZjI5OGQ4OTRmNzFhN2YyNzYwZTJlZGQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVrc2FuZGVyIEFsZWtzZWV2IDxhbGVrc2FuZGVyQHRpbWVz Y2FsZS5jb20+CkRhdGU6IFdlZCwgMjUgSmFuIDIwMjMgMTU6NTk6MzUgKzAzMDAKU3ViamVjdDog W1BBVENIIHYxXSBNYWtlIE9OIENPTkZMSUNUIERPIE5PVEhJTkcgYW5kIE9OIENPTkZMSUNUIERP IFVQREFURQogY29uc2lzdGVudAoKUHJpb3IgdG8gdGhpcyBjb21taXQgd2UgYWxsb3dlZCBzZWxm LWNvbmZsaWN0aW5nIGluc2VydHMgZm9yIERPIE5PVEhJTkc6CgogIENSRUFURSBUQUJMRSB0IChh IElOVCBVTklRVUUsIGIgSU5UKTsKICBJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwxKSwgKDEsMikg T04gQ09ORkxJQ1QgRE8gTk9USElORzsKICAtLSBzdWNjZWVkcywgaW5zZXJ0aW5nIHRoZSBmaXJz dCByb3cgYW5kIGlnbm9yaW5nIHRoZSBzZWNvbmQKCi4uLiBidXQgbm90IGZvciBETyBVUERBVEU6 CgogIElOU0VSVCBJTlRPIHQgVkFMVUVTICgxLDEpLCAoMSwyKSBPTiBDT05GTElDVCAoYSkgRE8g VVBEQVRFIFNFVCBiID0gMDsKICBFUlJPUjogIE9OIENPTkZMSUNUIERPIFVQREFURSBjb21tYW5k IGNhbm5vdCBhZmZlY3Qgcm93IGEgc2Vjb25kIHRpbWUKCk5vdyBETyBVUERBVEUgaXMgaGFuZGxl ZCBzaW1pbGFybHkgdG8gRE8gTk9USElORy4KCkF1dGhvcjogQWxla3NhbmRlciBBbGVrc2VldgpS ZXZpZXdlZC1ieTogVE9ETyBGSVhNRQpEaXNjdXNzaW9uOiBUT0RPIEZJWE1FCi0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9pbnNlcnQuc2dtbCAgICAgICAgICAgICAgICAgIHwgIDQgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAgICAgICAgICAgICB8IDIwICsrKysrKysrLQogc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgICAgIHwgIDQgKy0KIHNyYy9i YWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMgICAgICAgICAgICB8ICAzICstCiBzcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyAgICAgICAgfCA0MyArKysrKysrKy0tLS0t LS0tLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgICAgfCAg MyArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAgICAgICAgIHwgIDcg Ky0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbnN0cmFpbnRzLm91dCAgICAgfCAyOCAr KysrKystLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5zZXJ0X2NvbmZsaWN0Lm91 dCB8IDE3ICsrKy0tLS0tCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9jb25zdHJhaW50cy5zcWwgICAg ICAgICAgfCAgNCArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW5zZXJ0X2NvbmZsaWN0LnNxbCAg ICAgIHwgIDYgKy0tCiAxMSBmaWxlcyBjaGFuZ2VkLCA3NCBpbnNlcnRpb25zKCspLCA2NSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2luc2VydC5zZ21sIGIvZG9j L3NyYy9zZ21sL3JlZi9pbnNlcnQuc2dtbAppbmRleCA3Y2VhNzAzMjllLi4zNjhlNmY1YmQ2IDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2luc2VydC5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9yZWYvaW5zZXJ0LnNnbWwKQEAgLTUzMSw5ICs1MzEsNyBAQCBJTlNFUlQgSU5UTyA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgQVMgPHJl cGxhYwogICAgIGNsYXVzZSBpcyBhIDxxdW90ZT5kZXRlcm1pbmlzdGljPC9xdW90ZT4gc3RhdGVt ZW50LiAgVGhpcyBtZWFucwogICAgIHRoYXQgdGhlIGNvbW1hbmQgd2lsbCBub3QgYmUgYWxsb3dl ZCB0byBhZmZlY3QgYW55IHNpbmdsZSBleGlzdGluZwogICAgIHJvdyBtb3JlIHRoYW4gb25jZTsg YSBjYXJkaW5hbGl0eSB2aW9sYXRpb24gZXJyb3Igd2lsbCBiZSByYWlzZWQKLSAgICB3aGVuIHRo aXMgc2l0dWF0aW9uIGFyaXNlcy4gIFJvd3MgcHJvcG9zZWQgZm9yIGluc2VydGlvbiBzaG91bGQK LSAgICBub3QgZHVwbGljYXRlIGVhY2ggb3RoZXIgaW4gdGVybXMgb2YgYXR0cmlidXRlcyBjb25z dHJhaW5lZCBieSBhbgotICAgIGFyYml0ZXIgaW5kZXggb3IgY29uc3RyYWludC4KKyAgICB3aGVu IHRoaXMgc2l0dWF0aW9uIGFyaXNlcy4KICAgIDwvcGFyYT4KIAogICAgPHBhcmE+CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbS5jCmluZGV4IGU2MDI0YTk4MGIuLjM3YTNiZTdmMDkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbS5jCkBAIC0zMTI5LDcgKzMxMjksNyBAQCBzaW1wbGVfaGVhcF9kZWxldGUo UmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIHRpZCkKIFRNX1Jlc3VsdAogaGVhcF91cGRh dGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsIEhlYXBUdXBsZSBuZXd0dXAs CiAJCQlDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBjcm9zc2NoZWNrLCBib29sIHdhaXQsCi0JCQlU TV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUpCisJCQlUTV9GYWls dXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsIGJvb2wgZm9yY2VfdmlzaWJp bGl0eSkKIHsKIAlUTV9SZXN1bHQJcmVzdWx0OwogCVRyYW5zYWN0aW9uSWQgeGlkID0gR2V0Q3Vy cmVudFRyYW5zYWN0aW9uSWQoKTsKQEAgLTMyOTksNiArMzI5OSwyMSBAQCBsMjoKIAlsb2NrZXJf cmVtYWlucyA9IGZhbHNlOwogCXJlc3VsdCA9IEhlYXBUdXBsZVNhdGlzZmllc1VwZGF0ZSgmb2xk dHVwLCBjaWQsIGJ1ZmZlcik7CiAKKwlpZiAoZm9yY2VfdmlzaWJpbGl0eSAmJiAocmVzdWx0ID09 IFRNX0ludmlzaWJsZSkpCisJeworCQkvKgorCQkgKiBTcGVjaWFsIGNhc2Ugb2YgT04gQ09ORkxJ Q1QgLi4gRE8gVVBEQVRFIHdpdGggY29uZmxpY3RpbmcgdHVwbGVzCisJCSAqIGNyZWF0ZWQgd2l0 aGluIHRoZSBzYW1lIGNvbW1hbmQuIE5vcm1hbGx5IGEgY29tbWFuZCBkb2Vzbid0IHNlZSB0aGUK KwkJICogdHVwbGVzIGNyZWF0ZWQgYnkgdGhpcyBjb21tYW5kIGUuZy4gdG8gYXZvaWQgSGFsbG93 ZWVuIHByb2JsZW0uCisJCSAqIEhvd2V2ZXIgaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2Ugd2Ugd2Fu dCB0byB0cmVhdCB0aGUgdHVwbGVzIGFzIGlmCisJCSAqIHRoZXkgd2VyZSBpbnNlcnRlZCBieSB0 aGUgcHJldmlvc2x5IGV4ZWN1dGVkIGNvbW1hbmQuCisJCSAqCisJCSAqIFRoaXMgaXMgZG9uZSBp biBvcmRlciB0byBtYWtlIHRoZSBiZWhhdmlvciBjb25zaXN0ZW50IHdpdGggT04KKwkJICogQ09O RkxJQ1QgLi4gRE8gTk9USElORy4KKwkJICovCisJCXJlc3VsdCA9IFRNX09rOworCX0KKwogCS8q IHNlZSBiZWxvdyBhYm91dCB0aGUgIm5vIHdhaXQiIGNhc2UgKi8KIAlBc3NlcnQocmVzdWx0ICE9 IFRNX0JlaW5nTW9kaWZpZWQgfHwgd2FpdCk7CiAKQEAgLTM0NTcsNiArMzQ3Miw3IEBAIGwyOgog CQkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CiAJCQloZWFwX2FjcXVp cmVfdHVwbG9jayhyZWxhdGlvbiwgJihvbGR0dXAudF9zZWxmKSwgKmxvY2ttb2RlLAogCQkJCQkJ CQkgTG9ja1dhaXRCbG9jaywgJmhhdmVfdHVwbGVfbG9jayk7CisKIAkJCVhhY3RMb2NrVGFibGVX YWl0KHh3YWl0LCByZWxhdGlvbiwgJm9sZHR1cC50X3NlbGYsCiAJCQkJCQkJICBYTFRXX1VwZGF0 ZSk7CiAJCQljaGVja2VkX2xvY2tlcnMgPSB0cnVlOwpAQCAtNDE3NCw3ICs0MTkwLDcgQEAgc2lt cGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBIZWFw VHVwbGUgdHVwKQogCXJlc3VsdCA9IGhlYXBfdXBkYXRlKHJlbGF0aW9uLCBvdGlkLCB0dXAsCiAJ CQkJCQkgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJ IHRydWUgLyogd2FpdCBmb3IgY29tbWl0ICovICwKLQkJCQkJCSAmdG1mZCwgJmxvY2ttb2RlKTsK KwkJCQkJCSAmdG1mZCwgJmxvY2ttb2RlLCBmYWxzZSk7CiAJc3dpdGNoIChyZXN1bHQpCiAJewog CQljYXNlIFRNX1NlbGZNb2RpZmllZDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jCmluZGV4IGM0YjE5MTZkMzYuLjAwMWFkZGQ3ODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMzE0LDcgKzMxNCw3IEBAIHN0YXRpYyBUTV9SZXN1 bHQKIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90 aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQlDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBz bmFwc2hvdCwgU25hcHNob3QgY3Jvc3NjaGVjaywKIAkJCQkJYm9vbCB3YWl0LCBUTV9GYWlsdXJl RGF0YSAqdG1mZCwKLQkJCQkJTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsIGJvb2wgKnVwZGF0ZV9p bmRleGVzKQorCQkJCQlMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwgYm9vbCAqdXBkYXRlX2luZGV4 ZXMsIGJvb2wgZm9yY2VfdmlzaWJpbGl0eSkKIHsKIAlib29sCQlzaG91bGRGcmVlID0gdHJ1ZTsK IAlIZWFwVHVwbGUJdHVwbGUgPSBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlKHNsb3QsIHRydWUsICZz aG91bGRGcmVlKTsKQEAgLTMyNSw3ICszMjUsNyBAQCBoZWFwYW1fdHVwbGVfdXBkYXRlKFJlbGF0 aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAl0 dXBsZS0+dF90YWJsZU9pZCA9IHNsb3QtPnR0c190YWJsZU9pZDsKIAogCXJlc3VsdCA9IGhlYXBf dXBkYXRlKHJlbGF0aW9uLCBvdGlkLCB0dXBsZSwgY2lkLCBjcm9zc2NoZWNrLCB3YWl0LAotCQkJ CQkJIHRtZmQsIGxvY2ttb2RlKTsKKwkJCQkJCSB0bWZkLCBsb2NrbW9kZSwgZm9yY2VfdmlzaWJp bGl0eSk7CiAJSXRlbVBvaW50ZXJDb3B5KCZ0dXBsZS0+dF9zZWxmLCAmc2xvdC0+dHRzX3RpZCk7 CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKaW5kZXggZWYwZDM0ZmNlZS4uMDY1 YzhlOWU3NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCkBAIC0zNTUsNyArMzU1LDgg QEAgc2ltcGxlX3RhYmxlX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVyIG90 aWQsCiAJCQkJCQkJCUdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSksCiAJCQkJCQkJCXNuYXBzaG90 LCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCXRydWUgLyogd2FpdCBmb3IgY29tbWl0ICovICwK LQkJCQkJCQkJJnRtZmQsICZsb2NrbW9kZSwgdXBkYXRlX2luZGV4ZXMpOworCQkJCQkJCQkmdG1m ZCwgJmxvY2ttb2RlLCB1cGRhdGVfaW5kZXhlcywKKwkJCQkJCQkJZmFsc2UgLyogZG9uJ3QgZm9y Y2UgdmlzaWJpbGl0eSAqLyApOwogCiAJc3dpdGNoIChyZXN1bHQpCiAJewpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCBmNDE5YzQ3MDY1Li4yYmFmMWVhN2Y1IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwpAQCAtMTk1NSw3ICsxOTU1LDcgQEAg RXhlY1VwZGF0ZVByZXBhcmVTbG90KFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiBzdGF0 aWMgVE1fUmVzdWx0CiBFeGVjVXBkYXRlQWN0KE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwg UmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAkJCSAgSXRlbVBvaW50ZXIgdHVwbGVpZCwg SGVhcFR1cGxlIG9sZHR1cGxlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKLQkJCSAgYm9vbCBjYW5T ZXRUYWcsIFVwZGF0ZUNvbnRleHQgKnVwZGF0ZUN4dCkKKwkJCSAgYm9vbCBjYW5TZXRUYWcsIFVw ZGF0ZUNvbnRleHQgKnVwZGF0ZUN4dCwgYm9vbCBmb3JjZV92aXNpYmlsaXR5KQogewogCUVTdGF0 ZQkgICAqZXN0YXRlID0gY29udGV4dC0+ZXN0YXRlOwogCVJlbGF0aW9uCXJlc3VsdFJlbGF0aW9u RGVzYyA9IHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYzsKQEAgLTIwODksNyArMjA4OSw3 IEBAIGxyZXBsYWNlOgogCQkJCQkJCQllc3RhdGUtPmVzX2Nyb3NzY2hlY2tfc25hcHNob3QsCiAJ CQkJCQkJCXRydWUgLyogd2FpdCBmb3IgY29tbWl0ICovICwKIAkJCQkJCQkJJmNvbnRleHQtPnRt ZmQsICZ1cGRhdGVDeHQtPmxvY2ttb2RlLAotCQkJCQkJCQkmdXBkYXRlQ3h0LT51cGRhdGVJbmRl eGVzKTsKKwkJCQkJCQkJJnVwZGF0ZUN4dC0+dXBkYXRlSW5kZXhlcywgZm9yY2VfdmlzaWJpbGl0 eSk7CiAJaWYgKHJlc3VsdCA9PSBUTV9PaykKIAkJdXBkYXRlQ3h0LT51cGRhdGVkID0gdHJ1ZTsK IApAQCAtMjI0MCw3ICsyMjQwLDcgQEAgRXhlY0Nyb3NzUGFydGl0aW9uVXBkYXRlRm9yZWlnbktl eShNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKgog RXhlY1VwZGF0ZShNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsIFJlc3VsdFJlbEluZm8gKnJl c3VsdFJlbEluZm8sCiAJCSAgIEl0ZW1Qb2ludGVyIHR1cGxlaWQsIEhlYXBUdXBsZSBvbGR0dXBs ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCi0JCSAgIGJvb2wgY2FuU2V0VGFnKQorCQkgICBib29s IGNhblNldFRhZywgYm9vbCBmb3JjZV92aXNpYmlsaXR5KQogewogCUVTdGF0ZQkgICAqZXN0YXRl ID0gY29udGV4dC0+ZXN0YXRlOwogCVJlbGF0aW9uCXJlc3VsdFJlbGF0aW9uRGVzYyA9IHJlc3Vs dFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYzsKQEAgLTIyOTgsNyArMjI5OCw3IEBAIEV4ZWNVcGRh dGUoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LCBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJ bmZvLAogCiByZWRvX2FjdDoKIAkJcmVzdWx0ID0gRXhlY1VwZGF0ZUFjdChjb250ZXh0LCByZXN1 bHRSZWxJbmZvLCB0dXBsZWlkLCBvbGR0dXBsZSwgc2xvdCwKLQkJCQkJCQkgICBjYW5TZXRUYWcs ICZ1cGRhdGVDeHQpOworCQkJCQkJCSAgIGNhblNldFRhZywgJnVwZGF0ZUN4dCwgZm9yY2Vfdmlz aWJpbGl0eSk7CiAKIAkJLyoKIAkJICogSWYgRXhlY1VwZGF0ZUFjdCByZXBvcnRzIHRoYXQgYSBj cm9zcy1wYXJ0aXRpb24gdXBkYXRlIHdhcyBkb25lLApAQCAtMjQ5Niw2ICsyNDk2LDkgQEAgRXhl Y09uQ29uZmxpY3RVcGRhdGUoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCVRyYW5zYWN0 aW9uSWQgeG1pbjsKIAlib29sCQlpc251bGw7CiAKKwkvKiBJcyB0aGlzIGEgY2FzZSBvZiBjb25m bGljdGluZyB0dXBsZXMgY3JlYXRlZCB3aXRoaW4gdGhlIHNhbWUgY29tbWFuZD8gKi8KKwlib29s CQljb25mbGljdF93aXRoaW5fY29tbWFuZCA9IGZhbHNlOworCiAJLyogRGV0ZXJtaW5lIGxvY2sg bW9kZSB0byB1c2UgKi8KIAlsb2NrbW9kZSA9IEV4ZWNVcGRhdGVMb2NrTW9kZShjb250ZXh0LT5l c3RhdGUsIHJlc3VsdFJlbEluZm8pOwogCkBAIC0yNTIyLDE3ICsyNTI1LDYgQEAgRXhlY09uQ29u ZmxpY3RVcGRhdGUoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCQkJICogVGhpcyBjYW4g b2NjdXIgd2hlbiBhIGp1c3QgaW5zZXJ0ZWQgdHVwbGUgaXMgdXBkYXRlZCBhZ2FpbiBpbgogCQkJ ICogdGhlIHNhbWUgY29tbWFuZC4gRS5nLiBiZWNhdXNlIG11bHRpcGxlIHJvd3Mgd2l0aCB0aGUg c2FtZQogCQkJICogY29uZmxpY3Rpbmcga2V5IHZhbHVlcyBhcmUgaW5zZXJ0ZWQuCi0JCQkgKgot CQkJICogVGhpcyBpcyBzb21ld2hhdCBzaW1pbGFyIHRvIHRoZSBFeGVjVXBkYXRlKCkgVE1fU2Vs Zk1vZGlmaWVkCi0JCQkgKiBjYXNlLiAgV2UgZG8gbm90IHdhbnQgdG8gcHJvY2VlZCBiZWNhdXNl IGl0IHdvdWxkIGxlYWQgdG8gdGhlCi0JCQkgKiBzYW1lIHJvdyBiZWluZyB1cGRhdGVkIGEgc2Vj b25kIHRpbWUgaW4gc29tZSB1bnNwZWNpZmllZCBvcmRlciwKLQkJCSAqIGFuZCBpbiBjb250cmFz dCB0byBwbGFpbiBVUERBVEVzIHRoZXJlJ3Mgbm8gaGlzdG9yaWNhbCBiZWhhdmlvcgotCQkJICog dG8gYnJlYWsuCi0JCQkgKgotCQkJICogSXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0 byBwcmV2ZW50IHRoaXMgc2l0dWF0aW9uIGZyb20KLQkJCSAqIG9jY3VycmluZy4gIFRoZXNlIHBy b2JsZW1zIGFyZSB3aHkgdGhlIFNRTCBzdGFuZGFyZCBzaW1pbGFybHkKLQkJCSAqIHNwZWNpZmll cyB0aGF0IGZvciBTUUwgTUVSR0UsIGFuIGV4Y2VwdGlvbiBtdXN0IGJlIHJhaXNlZCBpbgotCQkJ ICogdGhlIGV2ZW50IG9mIGFuIGF0dGVtcHQgdG8gdXBkYXRlIHRoZSBzYW1lIHJvdyB0d2ljZS4K IAkJCSAqLwogCQkJeG1pbkRhdHVtID0gc2xvdF9nZXRzeXNhdHRyKGV4aXN0aW5nLAogCQkJCQkJ CQkJCU1pblRyYW5zYWN0aW9uSWRBdHRyaWJ1dGVOdW1iZXIsCkBAIC0yNTQxLDEyICsyNTMzLDE0 IEBAIEV4ZWNPbkNvbmZsaWN0VXBkYXRlKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAkJ CXhtaW4gPSBEYXR1bUdldFRyYW5zYWN0aW9uSWQoeG1pbkRhdHVtKTsKIAogCQkJaWYgKFRyYW5z YWN0aW9uSWRJc0N1cnJlbnRUcmFuc2FjdGlvbklkKHhtaW4pKQotCQkJCWVyZXBvcnQoRVJST1Is Ci0JCQkJCQkoZXJyY29kZShFUlJDT0RFX0NBUkRJTkFMSVRZX1ZJT0xBVElPTiksCi0JCQkJLyog dHJhbnNsYXRvcjogJXMgaXMgYSBTUUwgY29tbWFuZCBuYW1lICovCi0JCQkJCQkgZXJybXNnKCIl cyBjb21tYW5kIGNhbm5vdCBhZmZlY3Qgcm93IGEgc2Vjb25kIHRpbWUiLAotCQkJCQkJCQkiT04g Q09ORkxJQ1QgRE8gVVBEQVRFIiksCi0JCQkJCQkgZXJyaGludCgiRW5zdXJlIHRoYXQgbm8gcm93 cyBwcm9wb3NlZCBmb3IgaW5zZXJ0aW9uIHdpdGhpbiB0aGUgc2FtZSBjb21tYW5kIGhhdmUgZHVw bGljYXRlIGNvbnN0cmFpbmVkIHZhbHVlcy4iKSkpOworCQkJeworCQkJCS8qCisJCQkJICogRGV0 ZWN0IHRoZSBjYXNlIG9mIE9OIENPTkZMSUNUIC4uIERPIFVQREFURSAuLiAgd2l0aAorCQkJCSAq IGNvbmZsaWN0aW5nIHR1cGxlcyBjcmVhdGVkIHdpdGhpbiB0aGUgc2FtZSBjb21tYW5kLgorCQkJ CSAqLworCQkJCWNvbmZsaWN0X3dpdGhpbl9jb21tYW5kID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJ CX0KIAogCQkJLyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuICovCiAJCQllbG9nKEVSUk9SLCAiYXR0 ZW1wdGVkIHRvIGxvY2sgaW52aXNpYmxlIHR1cGxlIik7CkBAIC0yNjc0LDcgKzI2NjgsNyBAQCBF eGVjT25Db25mbGljdFVwZGF0ZShNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJKnJldHVy bmluZyA9IEV4ZWNVcGRhdGUoY29udGV4dCwgcmVzdWx0UmVsSW5mbywKIAkJCQkJCQljb25mbGlj dFRpZCwgTlVMTCwKIAkJCQkJCQlyZXN1bHRSZWxJbmZvLT5yaV9vbkNvbmZsaWN0LT5vY19Qcm9q U2xvdCwKLQkJCQkJCQljYW5TZXRUYWcpOworCQkJCQkJCWNhblNldFRhZywgY29uZmxpY3Rfd2l0 aGluX2NvbW1hbmQpOwogCiAJLyoKIAkgKiBDbGVhciBvdXQgZXhpc3RpbmcgdHVwbGUsIGFzIHRo ZXJlIG1pZ2h0IG5vdCBiZSBhbm90aGVyIGNvbmZsaWN0IGFtb25nCkBAIC0yODgxLDcgKzI4NzUs OCBAQCBsbWVyZ2VfbWF0Y2hlZDoKIAkJCQl9CiAJCQkJRXhlY1VwZGF0ZVByZXBhcmVTbG90KHJl c3VsdFJlbEluZm8sIG5ld3Nsb3QsIGNvbnRleHQtPmVzdGF0ZSk7CiAJCQkJcmVzdWx0ID0gRXhl Y1VwZGF0ZUFjdChjb250ZXh0LCByZXN1bHRSZWxJbmZvLCB0dXBsZWlkLCBOVUxMLAotCQkJCQkJ CQkJICAgbmV3c2xvdCwgbXRzdGF0ZS0+Y2FuU2V0VGFnLCAmdXBkYXRlQ3h0KTsKKwkJCQkJCQkJ CSAgIG5ld3Nsb3QsIG10c3RhdGUtPmNhblNldFRhZywgJnVwZGF0ZUN4dCwKKwkJCQkJCQkJCSAg IGZhbHNlKTsKIAkJCQlpZiAocmVzdWx0ID09IFRNX09rICYmIHVwZGF0ZUN4dC51cGRhdGVkKQog CQkJCXsKIAkJCQkJRXhlY1VwZGF0ZUVwaWxvZ3VlKGNvbnRleHQsICZ1cGRhdGVDeHQsIHJlc3Vs dFJlbEluZm8sCkBAIC0zODQ3LDcgKzM4NDIsNyBAQCBFeGVjTW9kaWZ5VGFibGUoUGxhblN0YXRl ICpwc3RhdGUpCiAKIAkJCQkvKiBOb3cgYXBwbHkgdGhlIHVwZGF0ZS4gKi8KIAkJCQlzbG90ID0g RXhlY1VwZGF0ZSgmY29udGV4dCwgcmVzdWx0UmVsSW5mbywgdHVwbGVpZCwgb2xkdHVwbGUsCi0J CQkJCQkJCSAgc2xvdCwgbm9kZS0+Y2FuU2V0VGFnKTsKKwkJCQkJCQkJICBzbG90LCBub2RlLT5j YW5TZXRUYWcsIGZhbHNlKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBDTURfREVMRVRFOgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oCmluZGV4IDQxNzEwOGYxZTAuLjAyM2FlZmYxYTYgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK QEAgLTI0OSw3ICsyNDksOCBAQCBleHRlcm4gdm9pZCBoZWFwX2Fib3J0X3NwZWN1bGF0aXZlKFJl bGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0aWQpOwogZXh0ZXJuIFRNX1Jlc3VsdCBoZWFw X3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgb3RpZCwKIAkJCQkJCQkgSGVh cFR1cGxlIG5ld3R1cCwKIAkJCQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVj aywgYm9vbCB3YWl0LAotCQkJCQkJCSBzdHJ1Y3QgVE1fRmFpbHVyZURhdGEgKnRtZmQsIExvY2tU dXBsZU1vZGUgKmxvY2ttb2RlKTsKKwkJCQkJCQkgc3RydWN0IFRNX0ZhaWx1cmVEYXRhICp0bWZk LCBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKKwkJCQkJCQkgYm9vbCBmb3JjZV92aXNpYmlsaXR5 KTsKIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9sb2NrX3R1cGxlKFJlbGF0aW9uIHJlbGF0aW9uLCBI ZWFwVHVwbGUgdHVwbGUsCiAJCQkJCQkJCSBDb21tYW5kSWQgY2lkLCBMb2NrVHVwbGVNb2RlIG1v ZGUsIExvY2tXYWl0UG9saWN5IHdhaXRfcG9saWN5LAogCQkJCQkJCQkgYm9vbCBmb2xsb3dfdXBk YXRlcywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IDNmYjE4NDcxN2YuLjk5NmU5OWE1ZjkgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3RhYmxlYW0uaApAQCAtNTI2LDcgKzUyNiw4IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1S b3V0aW5lCiAJCQkJCQkJCSBib29sIHdhaXQsCiAJCQkJCQkJCSBUTV9GYWlsdXJlRGF0YSAqdG1m ZCwKIAkJCQkJCQkJIExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAotCQkJCQkJCQkgYm9vbCAqdXBk YXRlX2luZGV4ZXMpOworCQkJCQkJCQkgYm9vbCAqdXBkYXRlX2luZGV4ZXMsCisJCQkJCQkJCSBi b29sIGZvcmNlX3Zpc2liaWxpdHkpOwogCiAJLyogc2VlIHRhYmxlX3R1cGxlX2xvY2soKSBmb3Ig cmVmZXJlbmNlIGFib3V0IHBhcmFtZXRlcnMgKi8KIAlUTV9SZXN1bHQJKCp0dXBsZV9sb2NrKSAo UmVsYXRpb24gcmVsLApAQCAtMTUwNiwxMiArMTUwNywxMiBAQCBzdGF0aWMgaW5saW5lIFRNX1Jl c3VsdAogdGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3RpZCwg VHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJICAgQ29tbWFuZElkIGNpZCwgU25hcHNob3Qgc25h cHNob3QsIFNuYXBzaG90IGNyb3NzY2hlY2ssCiAJCQkJICAgYm9vbCB3YWl0LCBUTV9GYWlsdXJl RGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJICAgYm9vbCAqdXBkYXRl X2luZGV4ZXMpCisJCQkJICAgYm9vbCAqdXBkYXRlX2luZGV4ZXMsIGJvb2wgZm9yY2VfdmlzaWJp bGl0eSkKIHsKIAlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT50dXBsZV91cGRhdGUocmVsLCBvdGlk LCBzbG90LAogCQkJCQkJCQkJCSBjaWQsIHNuYXBzaG90LCBjcm9zc2NoZWNrLAogCQkJCQkJCQkJ CSB3YWl0LCB0bWZkLAotCQkJCQkJCQkJCSBsb2NrbW9kZSwgdXBkYXRlX2luZGV4ZXMpOworCQkJ CQkJCQkJCSBsb2NrbW9kZSwgdXBkYXRlX2luZGV4ZXMsIGZvcmNlX3Zpc2liaWxpdHkpOwogfQog CiAvKgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb25zdHJhaW50cy5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbnN0cmFpbnRzLm91dAppbmRleCBlNmY2 NjAyZDk1Li4yMjZiM2ExMzNlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2NvbnN0cmFpbnRzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbnN0cmFp bnRzLm91dApAQCAtNDI5LDIxICs0MjksMjEgQEAgSU5TRVJUIElOVE8gVU5JUVVFX1RCTCAodCkg VkFMVUVTICgnc2l4Jyk7CiBJTlNFUlQgSU5UTyBVTklRVUVfVEJMICh0KSBWQUxVRVMgKCdzZXZl bicpOwogSU5TRVJUIElOVE8gVU5JUVVFX1RCTCBWQUxVRVMgKDUsICdmaXZlLXVwc2VydC1pbnNl cnQnKSBPTiBDT05GTElDVCAoaSkgRE8gVVBEQVRFIFNFVCB0ID0gJ2ZpdmUtdXBzZXJ0LXVwZGF0 ZSc7CiBJTlNFUlQgSU5UTyBVTklRVUVfVEJMIFZBTFVFUyAoNiwgJ3NpeC11cHNlcnQtaW5zZXJ0 JykgT04gQ09ORkxJQ1QgKGkpIERPIFVQREFURSBTRVQgdCA9ICdzaXgtdXBzZXJ0LXVwZGF0ZSc7 Ci0tLSBzaG91bGQgZmFpbAotSU5TRVJUIElOVE8gVU5JUVVFX1RCTCBWQUxVRVMgKDEsICdhJyks ICgyLCAnYicpLCAoMiwgJ2InKSBPTiBDT05GTElDVCAoaSkgRE8gVVBEQVRFIFNFVCB0ID0gJ2Zh aWxzJzsKLUVSUk9SOiAgT04gQ09ORkxJQ1QgRE8gVVBEQVRFIGNvbW1hbmQgY2Fubm90IGFmZmVj dCByb3cgYSBzZWNvbmQgdGltZQotSElOVDogIEVuc3VyZSB0aGF0IG5vIHJvd3MgcHJvcG9zZWQg Zm9yIGluc2VydGlvbiB3aXRoaW4gdGhlIHNhbWUgY29tbWFuZCBoYXZlIGR1cGxpY2F0ZSBjb25z dHJhaW5lZCB2YWx1ZXMuCistLSBzaG91bGQgbm90IGZhaWwKK0lOU0VSVCBJTlRPIFVOSVFVRV9U QkwgVkFMVUVTICgxMSwgJ2EnKSwgKDIyLCAnYicpLCAoMjIsICdiJykgT04gQ09ORkxJQ1QgKGkp IERPIFVQREFURSBTRVQgdCA9ICdmYWlscyc7CiBTRUxFQ1QgKiBGUk9NIFVOSVFVRV9UQkw7Ci0g aSB8ICAgICAgICAgdCAgICAgICAgICAKLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLQotIDEgfCBv bmUKLSAyIHwgdHdvCi0gNCB8IGZvdXIKLSAgIHwgc2l4Ci0gICB8IHNldmVuCi0gNSB8IGZpdmUt dXBzZXJ0LXVwZGF0ZQotIDYgfCBzaXgtdXBzZXJ0LWluc2VydAotKDcgcm93cykKKyBpICB8ICAg ICAgICAgdCAgICAgICAgICAKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMSB8IG9uZQor ICAyIHwgdHdvCisgIDQgfCBmb3VyCisgICAgfCBzaXgKKyAgICB8IHNldmVuCisgIDUgfCBmaXZl LXVwc2VydC11cGRhdGUKKyAgNiB8IHNpeC11cHNlcnQtaW5zZXJ0CisgMTEgfCBhCisgMjIgfCBm YWlscworKDkgcm93cykKIAogRFJPUCBUQUJMRSBVTklRVUVfVEJMOwogQ1JFQVRFIFRBQkxFIFVO SVFVRV9UQkwgKGkgaW50IFVOSVFVRSBOVUxMUyBOT1QgRElTVElOQ1QsIHQgdGV4dCk7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luc2VydF9jb25mbGljdC5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luc2VydF9jb25mbGljdC5vdXQKaW5kZXggOWU5ZTNi ZDAwYy4uNzczOTgxYTMyMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9p bnNlcnRfY29uZmxpY3Qub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5zZXJ0 X2NvbmZsaWN0Lm91dApAQCAtNzAwLDE5ICs3MDAsMTMgQEAgYmVnaW4gdHJhbnNhY3Rpb24gaXNv bGF0aW9uIGxldmVsIHNlcmlhbGl6YWJsZTsKIGluc2VydCBpbnRvIHNlbGZjb25mbGljdCB2YWx1 ZXMgKDMsMSksICgzLDIpIG9uIGNvbmZsaWN0IGRvIG5vdGhpbmc7CiBjb21taXQ7CiBiZWdpbiB0 cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgcmVhZCBjb21taXR0ZWQ7Ci1pbnNlcnQgaW50byBz ZWxmY29uZmxpY3QgdmFsdWVzICg0LDEpLCAoNCwyKSBvbiBjb25mbGljdChmMSkgZG8gdXBkYXRl IHNldCBmMiA9IDA7Ci1FUlJPUjogIE9OIENPTkZMSUNUIERPIFVQREFURSBjb21tYW5kIGNhbm5v dCBhZmZlY3Qgcm93IGEgc2Vjb25kIHRpbWUKLUhJTlQ6ICBFbnN1cmUgdGhhdCBubyByb3dzIHBy b3Bvc2VkIGZvciBpbnNlcnRpb24gd2l0aGluIHRoZSBzYW1lIGNvbW1hbmQgaGF2ZSBkdXBsaWNh dGUgY29uc3RyYWluZWQgdmFsdWVzLgoraW5zZXJ0IGludG8gc2VsZmNvbmZsaWN0IHZhbHVlcyAo NCwxKSwgKDQsMikgb24gY29uZmxpY3QoZjEpIGRvIHVwZGF0ZSBzZXQgZjIgPSAtMTsKIGNvbW1p dDsKIGJlZ2luIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCByZXBlYXRhYmxlIHJlYWQ7Ci1p bnNlcnQgaW50byBzZWxmY29uZmxpY3QgdmFsdWVzICg1LDEpLCAoNSwyKSBvbiBjb25mbGljdChm MSkgZG8gdXBkYXRlIHNldCBmMiA9IDA7Ci1FUlJPUjogIE9OIENPTkZMSUNUIERPIFVQREFURSBj b21tYW5kIGNhbm5vdCBhZmZlY3Qgcm93IGEgc2Vjb25kIHRpbWUKLUhJTlQ6ICBFbnN1cmUgdGhh dCBubyByb3dzIHByb3Bvc2VkIGZvciBpbnNlcnRpb24gd2l0aGluIHRoZSBzYW1lIGNvbW1hbmQg aGF2ZSBkdXBsaWNhdGUgY29uc3RyYWluZWQgdmFsdWVzLgoraW5zZXJ0IGludG8gc2VsZmNvbmZs aWN0IHZhbHVlcyAoNSwxKSwgKDUsMikgb24gY29uZmxpY3QoZjEpIGRvIHVwZGF0ZSBzZXQgZjIg PSAtMjsKIGNvbW1pdDsKIGJlZ2luIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBzZXJpYWxp emFibGU7Ci1pbnNlcnQgaW50byBzZWxmY29uZmxpY3QgdmFsdWVzICg2LDEpLCAoNiwyKSBvbiBj b25mbGljdChmMSkgZG8gdXBkYXRlIHNldCBmMiA9IDA7Ci1FUlJPUjogIE9OIENPTkZMSUNUIERP IFVQREFURSBjb21tYW5kIGNhbm5vdCBhZmZlY3Qgcm93IGEgc2Vjb25kIHRpbWUKLUhJTlQ6ICBF bnN1cmUgdGhhdCBubyByb3dzIHByb3Bvc2VkIGZvciBpbnNlcnRpb24gd2l0aGluIHRoZSBzYW1l IGNvbW1hbmQgaGF2ZSBkdXBsaWNhdGUgY29uc3RyYWluZWQgdmFsdWVzLgoraW5zZXJ0IGludG8g c2VsZmNvbmZsaWN0IHZhbHVlcyAoNiwxKSwgKDYsMikgb24gY29uZmxpY3QoZjEpIGRvIHVwZGF0 ZSBzZXQgZjIgPSAtMzsKIGNvbW1pdDsKIHNlbGVjdCAqIGZyb20gc2VsZmNvbmZsaWN0OwogIGYx IHwgZjIgCkBAIC03MjAsNyArNzE0LDEwIEBAIHNlbGVjdCAqIGZyb20gc2VsZmNvbmZsaWN0Owog ICAxIHwgIDEKICAgMiB8ICAxCiAgIDMgfCAgMQotKDMgcm93cykKKyAgNCB8IC0xCisgIDUgfCAt MgorICA2IHwgLTMKKyg2IHJvd3MpCiAKIGRyb3AgdGFibGUgc2VsZmNvbmZsaWN0OwogLS0gY2hl Y2sgT04gQ09ORkxJQ1QgaGFuZGxpbmcgd2l0aCBwYXJ0aXRpb25lZCB0YWJsZXMKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbnN0cmFpbnRzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2NvbnN0cmFpbnRzLnNxbAppbmRleCA1ZmZjZDRmZmM3Li5mNWJjN2IwOTZhIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb25zdHJhaW50cy5zcWwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvY29uc3RyYWludHMuc3FsCkBAIC0yOTksOCArMjk5LDggQEAgSU5TRVJU IElOVE8gVU5JUVVFX1RCTCAodCkgVkFMVUVTICgnc2V2ZW4nKTsKIAogSU5TRVJUIElOVE8gVU5J UVVFX1RCTCBWQUxVRVMgKDUsICdmaXZlLXVwc2VydC1pbnNlcnQnKSBPTiBDT05GTElDVCAoaSkg RE8gVVBEQVRFIFNFVCB0ID0gJ2ZpdmUtdXBzZXJ0LXVwZGF0ZSc7CiBJTlNFUlQgSU5UTyBVTklR VUVfVEJMIFZBTFVFUyAoNiwgJ3NpeC11cHNlcnQtaW5zZXJ0JykgT04gQ09ORkxJQ1QgKGkpIERP IFVQREFURSBTRVQgdCA9ICdzaXgtdXBzZXJ0LXVwZGF0ZSc7Ci0tLSBzaG91bGQgZmFpbAotSU5T RVJUIElOVE8gVU5JUVVFX1RCTCBWQUxVRVMgKDEsICdhJyksICgyLCAnYicpLCAoMiwgJ2InKSBP TiBDT05GTElDVCAoaSkgRE8gVVBEQVRFIFNFVCB0ID0gJ2ZhaWxzJzsKKy0tIHNob3VsZCBub3Qg ZmFpbAorSU5TRVJUIElOVE8gVU5JUVVFX1RCTCBWQUxVRVMgKDExLCAnYScpLCAoMjIsICdiJyks ICgyMiwgJ2InKSBPTiBDT05GTElDVCAoaSkgRE8gVVBEQVRFIFNFVCB0ID0gJ2ZhaWxzJzsKIAog U0VMRUNUICogRlJPTSBVTklRVUVfVEJMOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9pbnNlcnRfY29uZmxpY3Quc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW5zZXJ0X2Nv bmZsaWN0LnNxbAppbmRleCAyM2Q1Nzc4YjgyLi40MmM1ZjZjNzc4IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9pbnNlcnRfY29uZmxpY3Quc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2luc2VydF9jb25mbGljdC5zcWwKQEAgLTQzNCwxNSArNDM0LDE1IEBAIGluc2VydCBp bnRvIHNlbGZjb25mbGljdCB2YWx1ZXMgKDMsMSksICgzLDIpIG9uIGNvbmZsaWN0IGRvIG5vdGhp bmc7CiBjb21taXQ7CiAKIGJlZ2luIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCByZWFkIGNv bW1pdHRlZDsKLWluc2VydCBpbnRvIHNlbGZjb25mbGljdCB2YWx1ZXMgKDQsMSksICg0LDIpIG9u IGNvbmZsaWN0KGYxKSBkbyB1cGRhdGUgc2V0IGYyID0gMDsKK2luc2VydCBpbnRvIHNlbGZjb25m bGljdCB2YWx1ZXMgKDQsMSksICg0LDIpIG9uIGNvbmZsaWN0KGYxKSBkbyB1cGRhdGUgc2V0IGYy ID0gLTE7CiBjb21taXQ7CiAKIGJlZ2luIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCByZXBl YXRhYmxlIHJlYWQ7Ci1pbnNlcnQgaW50byBzZWxmY29uZmxpY3QgdmFsdWVzICg1LDEpLCAoNSwy KSBvbiBjb25mbGljdChmMSkgZG8gdXBkYXRlIHNldCBmMiA9IDA7CitpbnNlcnQgaW50byBzZWxm Y29uZmxpY3QgdmFsdWVzICg1LDEpLCAoNSwyKSBvbiBjb25mbGljdChmMSkgZG8gdXBkYXRlIHNl dCBmMiA9IC0yOwogY29tbWl0OwogCiBiZWdpbiB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwg c2VyaWFsaXphYmxlOwotaW5zZXJ0IGludG8gc2VsZmNvbmZsaWN0IHZhbHVlcyAoNiwxKSwgKDYs Mikgb24gY29uZmxpY3QoZjEpIGRvIHVwZGF0ZSBzZXQgZjIgPSAwOworaW5zZXJ0IGludG8gc2Vs ZmNvbmZsaWN0IHZhbHVlcyAoNiwxKSwgKDYsMikgb24gY29uZmxpY3QoZjEpIGRvIHVwZGF0ZSBz ZXQgZjIgPSAtMzsKIGNvbW1pdDsKIAogc2VsZWN0ICogZnJvbSBzZWxmY29uZmxpY3Q7Ci0tIAoy LjM5LjEKCg== --0000000000004385f505f3188513--