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 1thTvb-002yCn-Ur for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Feb 2025 13:34:24 +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 1thTva-001NRL-Lp for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Feb 2025 13:34:22 +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 1thTva-001NRD-A6 for pgsql-hackers@lists.postgresql.org; Mon, 10 Feb 2025 13:34:22 +0000 Received: from mail-vs1-xe2f.google.com ([2607:f8b0:4864:20::e2f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1thTvX-0002Xd-0X for pgsql-hackers@postgresql.org; Mon, 10 Feb 2025 13:34:21 +0000 Received: by mail-vs1-xe2f.google.com with SMTP id ada2fe7eead31-4bbd3cff198so449759137.2 for ; Mon, 10 Feb 2025 05:34:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739194457; x=1739799257; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=FT50jqmCrTu6yccWM4w/CarcfxR8dXAae4hAZbdHCxM=; b=dWUv0JvZsNVZxeRQgO16VAUpliElS8ME/cjgVwRMaD/rESYR072PG9SBdjpQrTaV6f wKHBwZNW/LxAL9McSblaIWUA2B89OvvJ9KPtPamdN6KU2qD06WXIgZYdGpQfPnLlnkHa KAUf7cv1kOuPuguYq7fsuYMWJmjW+20Z/CpkddquQWFwUBAIDsSNAB3FSrBIGTfdruqC udIKdn+bCmlmjNyKxvd0wR+na0cqDGLjh5XhdYorNA0GBXXglnu223kWpFnmd5SGJ4Qw s9yHG7qI/I1eyuyO6BeBjjCs5a1+LXMGKFqz1lQp0KfxXOkTop7Ybf3NUwkUgGas8/lr jbbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739194457; x=1739799257; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=FT50jqmCrTu6yccWM4w/CarcfxR8dXAae4hAZbdHCxM=; b=D+tPGW+HH8WvgoYTkF55bo3Jt/QKs74aPxIr/lYVMEsJjPeFzPX3RNjlOJqQCVZWnq +XmVc2LZ/lV54pwT6Ahn/6Kvyg/SVXSi0+B4CSb/EWixxYgF0g1QUw6rlAthVrk4hxnk GHknkpZVs2X/u+GYVWp3cM+xOTkMcJpMLJh6Di5bcnMPx5MU/2VV/5wnbZAOIgjBtuOW jQjtwjwZMZMKBUhQONN1XSwJR3fg8gjVqwuaxdvHjEuR+WOuu7V7pMGet1fXG1aIDbqj N/bI00ahU+/kMZo1OxQtJ9GZ/2FQ1f+3LkHNBNVAI+LQOvkgW8VlG9bVEQCX8OQnMp2h IkYw== X-Gm-Message-State: AOJu0YzXu3vVBbUlhP+QJ+vsuOX9A2IXuLUSMdnH9h2jozCAmB16q6Hx +DkpbQGZ2elL5tb1/vefOBMtNnlCEOjkjIJY4rkmzPvBMwoqb4RD07aAfQ7QezCSB3QlReJbe2I ULTVDqjD/ExGKyU3i9aEcKFdKkVNimuSy7xQ= X-Gm-Gg: ASbGnctoHeHA2py52WoBL3ABL1Pnb3dr9eeCn86lFca9YmJUp8rtdKAvgwhsB07Cvrw N+6pNNQkiNf5y4FTQ52VXdTO+7jw/bkeGpjTzfk5petQRZnzi5KHWqfrQWUH4IvRnS3Ihs3EHkn j8B4yXQbc4ZvyFpLZgPMsNtYH33PCQ X-Google-Smtp-Source: AGHT+IFs/4SeR8YmiNL1c5J3hxnPkK9ZvnnCwcsT6B+n8HKSYjAKgOOsdGgdI9DHOmB76RV1P49RjobWhSmIsLCREr4= X-Received: by 2002:a05:6102:41a0:b0:4b2:5ca3:2b09 with SMTP id ada2fe7eead31-4ba85ec43cdmr9425689137.19.1739194457444; Mon, 10 Feb 2025 05:34:17 -0800 (PST) MIME-Version: 1.0 From: jian he Date: Mon, 10 Feb 2025 21:33:41 +0800 X-Gm-Features: AWEUYZmk_ckNeYsG4BDdgPHf79PnYvO_4eVmutELAVooYyj7_-InLwDja8WSGaE Message-ID: Subject: support virtual generated column not null constraint To: PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000d4fdc5062dc9c352" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d4fdc5062dc9c352 Content-Type: text/plain; charset="UTF-8" hi. Virtual generated columns committed, https://git.postgresql.org/cgit/postgresql.git/commit/?id=83ea6c54025bea67bcd4949a6d58d3fc11c3e21b This patch is for implementing not null constraints on virtual generated columns. NOT NULL constraints on virtual generated columns mean that if we INSERT a row into the table and the evaluation of the generated expression results in a null value, an ERRCODE_NOT_NULL_VIOLATION error will be reported. main gotcha is in ExecConstraints, expand the generated expression and convert a not null constraint to a check constraint and evaluate it. --000000000000d4fdc5062dc9c352 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-support-virtual-generated-column-not-null-constra.patch" Content-Disposition: attachment; filename="v1-0001-support-virtual-generated-column-not-null-constra.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m6z3dc4l0 RnJvbSA5NDVlZTc5OWJlY2E2MmU3NmYxMjg2NjBhZWY2NThlZjYxYTExYThhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMTAgRmViIDIwMjUgMjE6MjA6MDIgKzA4MDAKU3ViamVjdDogW1BBVENIIHYx IDEvMV0gc3VwcG9ydCB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4gbm90IG51bGwgY29uc3RyYWlu dAoKbm93IHdlIGNhbiBhZGQgbm90IG51bGwgY29uc3RyYWludCBvbiB2aXJ0dWFsIGdlbmVyYXRl ZCBjb2x1bW4uICBub3QgbnVsbApjb25zdHJhaW50IG9uIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVt biBtYWtlIHN1cmUgZXZhdWxhdGlvbiBvZiB0aGUgZXhwYW5kZWQKZ2VuZXJhdGVkIGV4cHJlc3Np b24gZG9lcyBub3QgeWllbGQgbnVsbC4KCmRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20v Ci0tLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMgICAgICAgICAgICAgICAgICAgIHwgIDEw IC0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgfCAgIDgg LQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgICAgICAgIHwgMTUyICsr KysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYyAgICAg ICAgICAgIHwgIDE0IC0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAg ICAgICAgfCAgIDIgKwogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0 ICAgIHwgIDI3ICsrLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNx bCAgICB8ICAxMiArLQogNyBmaWxlcyBjaGFuZ2VkLCAxNzIgaW5zZXJ0aW9ucygrKSwgNTMgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMgYi9zcmMv YmFja2VuZC9jYXRhbG9nL2hlYXAuYwppbmRleCA5NTZmMTk2ZmM5Li4yZDQyNzYxYzkxIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2hlYXAuYworKysgYi9zcmMvYmFja2VuZC9jYXRh bG9nL2hlYXAuYwpAQCAtMjU2NCwxMSArMjU2NCw2IEBAIEFkZFJlbGF0aW9uTmV3Q29uc3RyYWlu dHMoUmVsYXRpb24gcmVsLAogCQkJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBP UlRFRCksCiAJCQkJCQllcnJtc2coImNhbm5vdCBhZGQgbm90LW51bGwgY29uc3RyYWludCBvbiBz eXN0ZW0gY29sdW1uIFwiJXNcIiIsCiAJCQkJCQkJICAgc3RyVmFsKGxpbml0aWFsKGNkZWYtPmtl eXMpKSkpOwotCQkJLyogVE9ETzogc2VlIHRyYW5zZm9ybUNvbHVtbkRlZmluaXRpb24oKSAqLwot CQkJaWYgKGdldF9hdHRnZW5lcmF0ZWQoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBjb2xudW0pID09 IEFUVFJJQlVURV9HRU5FUkFURURfVklSVFVBTCkKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJ ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCQllcnJtc2coIm5v dC1udWxsIGNvbnN0cmFpbnRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHZpcnR1YWwgZ2VuZXJhdGVk IGNvbHVtbnMiKSk7CiAKIAkJCS8qCiAJCQkgKiBJZiB0aGUgY29sdW1uIGFscmVhZHkgaGFzIGEg bm90LW51bGwgY29uc3RyYWludCwgd2UgZG9uJ3Qgd2FudApAQCAtMjg4NCwxMSArMjg3OSw2IEBA IEFkZFJlbGF0aW9uTm90TnVsbENvbnN0cmFpbnRzKFJlbGF0aW9uIHJlbCwgTGlzdCAqY29uc3Ry YWludHMsCiAJCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJ CQllcnJtc2coImNhbm5vdCBhZGQgbm90LW51bGwgY29uc3RyYWludCBvbiBzeXN0ZW0gY29sdW1u IFwiJXNcIiIsCiAJCQkJCQkgICBzdHJWYWwobGluaXRpYWwoY29uc3RyLT5rZXlzKSkpKTsKLQkJ LyogVE9ETzogc2VlIHRyYW5zZm9ybUNvbHVtbkRlZmluaXRpb24oKSAqLwotCQlpZiAoZ2V0X2F0 dGdlbmVyYXRlZChSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSkgPT0gQVRUUklCVVRFX0dF TkVSQVRFRF9WSVJUVUFMKQotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCWVycm1zZygibm90LW51bGwgY29uc3RyYWlu dHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyIpKTsKIAog CQkvKgogCQkgKiBBIGNvbHVtbiBjYW4gb25seSBoYXZlIG9uZSBub3QtbnVsbCBjb25zdHJhaW50 LCBzbyBkaXNjYXJkIGFueQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVj bWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCA1ODIzZmNlOTM0 Li5kNjcyZDFiMDYwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtNzgwMywxNCArNzgw Myw2IEBAIEFURXhlY1NldE5vdE51bGwoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBjaGFy ICpjb25OYW1lLCBjaGFyICpjb2xOYW1lLAogCQkJCSBlcnJtc2coImNhbm5vdCBhbHRlciBzeXN0 ZW0gY29sdW1uIFwiJXNcIiIsCiAJCQkJCQljb2xOYW1lKSkpOwogCi0JLyogVE9ETzogc2VlIHRy YW5zZm9ybUNvbHVtbkRlZmluaXRpb24oKSAqLwotCWlmIChUdXBsZURlc2NBdHRyKFJlbGF0aW9u R2V0RGVzY3IocmVsKSwgYXR0bnVtIC0gMSktPmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VO RVJBVEVEX1ZJUlRVQUwpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJCSBlcnJtc2coIm5vdC1udWxsIGNvbnN0cmFpbnRz IGFyZSBub3Qgc3VwcG9ydGVkIG9uIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMiKSwKLQkJCQkg ZXJyZGV0YWlsKCJDb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uIFwiJXNcIiBpcyBhIHZpcnR1YWwg Z2VuZXJhdGVkIGNvbHVtbi4iLAotCQkJCQkJICAgY29sTmFtZSwgUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUocmVsKSkpKTsKLQogCS8qIFNlZSBpZiB0aGVyZSdzIGFscmVhZHkgYSBjb25zdHJhaW50 ICovCiAJdHVwbGUgPSBmaW5kTm90TnVsbENvbnN0cmFpbnRBdHRudW0oUmVsYXRpb25HZXRSZWxp ZChyZWwpLCBhdHRudW0pOwogCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjTWFpbi5jCmluZGV4IDM5ZDgwY2NmYmEuLjcwZWIyMzcwYmIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY01haW4uYwpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgImZvcmVpZ24vZmR3YXBpLmgi CiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNs dWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9xdWVyeWp1bWJsZS5oIgog I2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgpA QCAtMTI2OCw2ICsxMjY5LDcgQEAgSW5pdFJlc3VsdFJlbEluZm8oUmVzdWx0UmVsSW5mbyAqcmVz dWx0UmVsSW5mbywKIAlyZXN1bHRSZWxJbmZvLT5yaV9GZHdTdGF0ZSA9IE5VTEw7CiAJcmVzdWx0 UmVsSW5mby0+cmlfdXNlc0Zkd0RpcmVjdE1vZGlmeSA9IGZhbHNlOwogCXJlc3VsdFJlbEluZm8t PnJpX0NvbnN0cmFpbnRFeHBycyA9IE5VTEw7CisJcmVzdWx0UmVsSW5mby0+cmlfVmlyR2VuZXJh dGVkQ29uc3RyYWludEV4cHJzID0gTlVMTDsKIAlyZXN1bHRSZWxJbmZvLT5yaV9HZW5lcmF0ZWRF eHByc0kgPSBOVUxMOwogCXJlc3VsdFJlbEluZm8tPnJpX0dlbmVyYXRlZEV4cHJzVSA9IE5VTEw7 CiAJcmVzdWx0UmVsSW5mby0+cmlfcHJvamVjdFJldHVybmluZyA9IE5VTEw7CkBAIC0xNzM3LDYg KzE3MzksODMgQEAgRXhlY3V0ZVBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCiB9CiAKIAorLyoK KyAqIGNoZWNrIHdoZXRoZXIgdGhlIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiBpcyBudWxsLgor ICogRXhwYW5kIHRoZSBnZW5lcmF0ZWQgZXhwcmVzc2lvbiBhbmQgZXZhbHVhdGUgaXQuICBBIHJl dHVybiB2YWx1ZSBvZiAtMQorICogaW5kaWNhdGVzIHRoYXQgdGhlIGdlbmVyYXRlZCBleHByZXNz aW9uIGlzIG5vdCBudWxsLCB3aGlsZSBhIHZhbHVlIGdyZWF0ZXIKKyAqIHRoYW4gMCBzaWduaWZp ZXMgbnVsbC4gVGhpcyBpcyBzaW1pbGFyIHRvIEV4ZWNSZWxDaGVjay4KKyovCitzdGF0aWMgaW50 CitFeGVjUmVsQ2hlY2tHZW5WaXJ0dWFsTm90TnVsbChSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJ bmZvLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkgIEVTdGF0ZSAqZXN0YXRlLCBCaXRt YXBzZXQgKmdlbl92aXJ0dWFsX2NvbHMpCit7CisJUmVsYXRpb24JcmVsID0gcmVzdWx0UmVsSW5m by0+cmlfUmVsYXRpb25EZXNjOworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNj cihyZWwpOworCUV4cHJDb250ZXh0ICplY29udGV4dDsKKwlNZW1vcnlDb250ZXh0IG9sZENvbnRl eHQ7CisJaW50CQkJaSA9IDA7CisJaW50CQkJYXR0aWR4ID0gLTE7CisJaW50CQkJKmF0dG51bXM7 CisJYXR0bnVtcyA9IChpbnQgKikgcGFsbG9jMChibXNfbnVtX21lbWJlcnMoZ2VuX3ZpcnR1YWxf Y29scykgKiBzaXplb2YoaW50KSk7CisKKwlpZiAocmVzdWx0UmVsSW5mby0+cmlfVmlyR2VuZXJh dGVkQ29uc3RyYWludEV4cHJzID09IE5VTEwpCisJeworCQlvbGRDb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKGVzdGF0ZS0+ZXNfcXVlcnlfY3h0KTsKKwkJcmVzdWx0UmVsSW5mby0+cmlf VmlyR2VuZXJhdGVkQ29uc3RyYWludEV4cHJzID0KKwkJCShFeHByU3RhdGUgKiopIHBhbGxvYzAo Ym1zX251bV9tZW1iZXJzKGdlbl92aXJ0dWFsX2NvbHMpICogc2l6ZW9mKEV4cHJTdGF0ZSAqKSk7 CisKKwkJd2hpbGUgKChhdHRpZHggPSBibXNfbmV4dF9tZW1iZXIoZ2VuX3ZpcnR1YWxfY29scywg YXR0aWR4KSkgPj0gMCkKKwkJeworCQkJRXhwcgkgICAqY2hlY2tjb25zdHI7CisJCQlOdWxsVGVz dCAgICpubnVsbHRlc3QgPSBtYWtlTm9kZShOdWxsVGVzdCk7CisJCQlGb3JtX3BnX2F0dHJpYnV0 ZSBhdHRyID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBhdHRpZHggLTEpOworCisJCQlubnVsbHRl c3QtPmFyZyA9IChFeHByICopIG1ha2VWYXIoMSwKKwkJCQkJCQkJCQkJICBhdHRyLT5hdHRudW0s CisJCQkJCQkJCQkJCSAgYXR0ci0+YXR0dHlwaWQsCisJCQkJCQkJCQkJCSAgYXR0ci0+YXR0dHlw bW9kLAorCQkJCQkJCQkJCQkgIGF0dHItPmF0dGNvbGxhdGlvbiwKKwkJCQkJCQkJCQkJICAwKTsK KwkJCW5udWxsdGVzdC0+bnVsbHRlc3R0eXBlID0gSVNfTk9UX05VTEw7CisJCQlubnVsbHRlc3Qt PmFyZ2lzcm93ID0gZmFsc2U7CisJCQlubnVsbHRlc3QtPmxvY2F0aW9uID0gLTE7CisKKwkJCWNo ZWNrY29uc3RyID0gKEV4cHIgKikgbm51bGx0ZXN0OworCQkJY2hlY2tjb25zdHIgPSAoRXhwciAq KSBleHBhbmRfZ2VuZXJhdGVkX2NvbHVtbnNfaW5fZXhwcigoTm9kZSAqKSBjaGVja2NvbnN0ciwg cmVsLCAxKTsKKwkJCXJlc3VsdFJlbEluZm8tPnJpX1ZpckdlbmVyYXRlZENvbnN0cmFpbnRFeHBy c1tpXSA9IEV4ZWNQcmVwYXJlRXhwcihjaGVja2NvbnN0ciwgZXN0YXRlKTsKKwkJCWF0dG51bXNb aSsrXSA9IGF0dGlkeDsKKwkJfQorCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7 CisJfQorCWVsc2UKKwl7CisJCXdoaWxlICgoYXR0aWR4ID0gYm1zX25leHRfbWVtYmVyKGdlbl92 aXJ0dWFsX2NvbHMsIGF0dGlkeCkpID49IDApCisJCQlhdHRudW1zW2krK10gPSBhdHRpZHg7CisJ fQorCisJLyoKKwkgKiBXZSB3aWxsIHVzZSB0aGUgRVN0YXRlJ3MgcGVyLXR1cGxlIGNvbnRleHQg Zm9yIGV2YWx1YXRpbmcgdmlydHVhbAorCSAqIGdlbmVyYXRlZCBjb2x1bW4gY2hlY2sgY29uc3Ry YWludCBleHByZXNzaW9ucyAoY3JlYXRpbmcgaXQgaWYgaXQncyBub3QKKwkgKiBhbHJlYWR5IHRo ZXJlKS4KKwkgKi8KKwllY29udGV4dCA9IEdldFBlclR1cGxlRXhwckNvbnRleHQoZXN0YXRlKTsK KworCS8qIEFycmFuZ2UgZm9yIGVjb250ZXh0J3Mgc2NhbiB0dXBsZSB0byBiZSB0aGUgdHVwbGUg dW5kZXIgdGVzdCAqLworCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IHNsb3Q7CisKKwkvKiBB bmQgZXZhbHVhdGUgdGhlIGNoZWNrIGNvbnN0cmFpbnRzIGZvciB2aXJ0dWFsIGdlbmVyYXRlZCBj b2x1bW4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgYm1zX251bV9tZW1iZXJzKGdlbl92aXJ0dWFsX2Nv bHMpOyBpKyspCisJeworCQlFeHByU3RhdGUgICpnZW5fdmlydHVhbG5uID0gcmVzdWx0UmVsSW5m by0+cmlfVmlyR2VuZXJhdGVkQ29uc3RyYWludEV4cHJzW2ldOworCisJCWlmIChnZW5fdmlydHVh bG5uICYmICFFeGVjQ2hlY2soZ2VuX3ZpcnR1YWxubiwgZWNvbnRleHQpKQorCQkJcmV0dXJuIGF0 dG51bXNbaV07CisJfQorCisJLyogLTEgcmVzdWx0IG1lYW5zIG5vIGVycm9yICovCisJcmV0dXJu IC0xOworfQorCiAvKgogICogRXhlY1JlbENoZWNrIC0tLSBjaGVjayB0aGF0IHR1cGxlIG1lZXRz IGNvbnN0cmFpbnRzIGZvciByZXN1bHQgcmVsYXRpb24KICAqCkBAIC0xOTcyLDYgKzIwNTEsOCBA QCBFeGVjQ29uc3RyYWludHMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAkJCQlSZWxh dGlvbglvcmlnX3JlbCA9IHJlbDsKIAkJCQlUdXBsZURlc2MJb3JpZ190dXBkZXNjID0gUmVsYXRp b25HZXREZXNjcihyZWwpOwogCisJCQkJaWYgKGF0dC0+YXR0Z2VuZXJhdGVkID09IEFUVFJJQlVU RV9HRU5FUkFURURfVklSVFVBTCkKKwkJCQkJY29udGludWU7CiAJCQkJLyoKIAkJCQkgKiBJZiB0 aGUgdHVwbGUgaGFzIGJlZW4gcm91dGVkLCBpdCdzIGJlZW4gY29udmVydGVkIHRvIHRoZQogCQkJ CSAqIHBhcnRpdGlvbidzIHJvd3R5cGUsIHdoaWNoIG1pZ2h0IGRpZmZlciBmcm9tIHRoZSByb290 CkBAIC0yMDIxLDYgKzIxMDIsNzcgQEAgRXhlY0NvbnN0cmFpbnRzKFJlc3VsdFJlbEluZm8gKnJl c3VsdFJlbEluZm8sCiAJCX0KIAl9CiAKKwkvKiBjaGVjayB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1 bW4gaXMgbm90IG51bGwgb3Igbm90ICovCisJaWYgKGNvbnN0ci0+aGFzX25vdF9udWxsICYmIGNv bnN0ci0+aGFzX2dlbmVyYXRlZF92aXJ0dWFsKQorCXsKKwkJaW50CQkJYXR0bnVtOworCQlCaXRt YXBzZXQgICp2aXJfZ2VuY29scyA9IE5VTEw7CisJCWNoYXIJICAgKnZhbF9kZXNjID0gTlVMTDsK KwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0OworCisJCWZvciAoYXR0bnVtID0gMTsgYXR0bnVtIDw9 IHR1cGRlc2MtPm5hdHRzOyBhdHRudW0rKykKKwkJeworCQkJYXR0ID0gVHVwbGVEZXNjQXR0cih0 dXBkZXNjLCBhdHRudW0gLSAxKTsKKwkJCWlmIChhdHQtPmF0dG5vdG51bGwgJiYgYXR0LT5hdHRn ZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMKQorCQkJCXZpcl9nZW5jb2xz ID0gYm1zX2FkZF9tZW1iZXIodmlyX2dlbmNvbHMsIGF0dC0+YXR0bnVtKTsKKwkJfQorCQlhdHRu dW0gPSAtMTsKKworCQlpZih2aXJfZ2VuY29scyAhPSBOVUxMKQorCQl7CisJCQlSZWxhdGlvbglv cmlnX3JlbF9ubiA9IHJlbDsKKworCQkJYXR0bnVtID0gRXhlY1JlbENoZWNrR2VuVmlydHVhbE5v dE51bGwocmVzdWx0UmVsSW5mbywgc2xvdCwgZXN0YXRlLCB2aXJfZ2VuY29scyk7CisKKwkJCWlm IChhdHRudW0gPiAwKQorCQkJeworCQkJCS8qIG51bGwgdmFsdWUgb24gdmlydHVhbCBnZW5lcmF0 ZWQgY29sdW1uLiBub3cgZm9ybWF0IHRoZSBlcnJvciBtZXNzYWdlICovCisJCQkJaWYgKHJlc3Vs dFJlbEluZm8tPnJpX1Jvb3RSZXN1bHRSZWxJbmZvKQorCQkJCXsKKwkJCQkJUmVzdWx0UmVsSW5m byAqcm9vdHJlbCA9IHJlc3VsdFJlbEluZm8tPnJpX1Jvb3RSZXN1bHRSZWxJbmZvOworCQkJCQlU dXBsZURlc2MJb2xkX3R1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJCQkJCUF0dHJN YXAgICAgKm1hcDsKKworCQkJCQl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyb290cmVsLT5y aV9SZWxhdGlvbkRlc2MpOworCQkJCQkvKiBhIHJldmVyc2UgbWFwICovCisJCQkJCW1hcCA9IGJ1 aWxkX2F0dHJtYXBfYnlfbmFtZV9pZl9yZXEob2xkX3R1cGRlc2MsCisJCQkJCQkJCQkJCQkJICAg dHVwZGVzYywKKwkJCQkJCQkJCQkJCQkgICBmYWxzZSk7CisJCQkJCS8qCisJCQkJCSogUGFydGl0 aW9uLXNwZWNpZmljIHNsb3QncyB0dXBkZXNjIGNhbid0IGJlIGNoYW5nZWQsIHNvCisJCQkJCSog YWxsb2NhdGUgYSBuZXcgb25lLgorCQkJCQkqLworCQkJCQlpZiAobWFwICE9IE5VTEwpCisJCQkJ CQlzbG90ID0gZXhlY3V0ZV9hdHRyX21hcF9zbG90KG1hcCwgc2xvdCwKKwkJCQkJCQkJCQkJCQkg TWFrZVR1cGxlVGFibGVTbG90KHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKSk7CisJCQkJCW1vZGlm aWVkQ29scyA9IGJtc191bmlvbihFeGVjR2V0SW5zZXJ0ZWRDb2xzKHJvb3RyZWwsIGVzdGF0ZSks CisJCQkJCQkJCQkJCSBFeGVjR2V0VXBkYXRlZENvbHMocm9vdHJlbCwgZXN0YXRlKSk7CisKKwkJ CQkJcmVsID0gcm9vdHJlbC0+cmlfUmVsYXRpb25EZXNjOworCQkJCX0KKwkJCQllbHNlCisJCQkJ CW1vZGlmaWVkQ29scyA9IGJtc191bmlvbihFeGVjR2V0SW5zZXJ0ZWRDb2xzKHJlc3VsdFJlbElu Zm8sIGVzdGF0ZSksCisJCQkJCQkJCQkJCSBFeGVjR2V0VXBkYXRlZENvbHMocmVzdWx0UmVsSW5m bywgZXN0YXRlKSk7CisKKwkJCQl2YWxfZGVzYyA9IEV4ZWNCdWlsZFNsb3RWYWx1ZURlc2NyaXB0 aW9uKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwKKwkJCQkJCQkJCQkJCQkJIHNsb3QsCisJCQkJCQkJ CQkJCQkJCSB0dXBkZXNjLAorCQkJCQkJCQkJCQkJCQkgbW9kaWZpZWRDb2xzLAorCQkJCQkJCQkJ CQkJCQkgNjQpOworCisJCQkJYXR0ID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBhdHRudW0gLSAx KTsKKworCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQllcnJjb2RlKEVSUkNPREVfTk9UX05VTExf VklPTEFUSU9OKSwKKwkJCQkJCWVycm1zZygibnVsbCB2YWx1ZSBpbiBjb2x1bW4gXCIlc1wiIG9m IHJlbGF0aW9uIFwiJXNcIiB2aW9sYXRlcyBub3QtbnVsbCBjb25zdHJhaW50IiwKKwkJCQkJCQkJ TmFtZVN0cihhdHQtPmF0dG5hbWUpLAorCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShv cmlnX3JlbF9ubikpLAorCQkJCQkJdmFsX2Rlc2MgPyBlcnJkZXRhaWwoIkZhaWxpbmcgcm93IGNv bnRhaW5zICVzLiIsIHZhbF9kZXNjKSA6IDAsCisJCQkJCQllcnJ0YWJsZWNvbChvcmlnX3JlbF9u biwgYXR0bnVtKSk7CisJCQl9CisJCX0KKwl9CisKIAlpZiAocmVsLT5yZF9yZWwtPnJlbGNoZWNr cyA+IDApCiAJewogCQljb25zdCBjaGFyICpmYWlsZWQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxj bWQuYwppbmRleCBlYjc3MTZjZDg0Li5iYTMwOWU0N2YwIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91 dGlsY21kLmMKQEAgLTk4OCwyMCArOTg4LDYgQEAgdHJhbnNmb3JtQ29sdW1uRGVmaW5pdGlvbihD cmVhdGVTdG10Q29udGV4dCAqY3h0LCBDb2x1bW5EZWYgKmNvbHVtbikKIAkJCQkJCQljb2x1bW4t PmNvbG5hbWUsIGN4dC0+cmVsYXRpb24tPnJlbG5hbWUpLAogCQkJCQkgcGFyc2VyX2VycnBvc2l0 aW9uKGN4dC0+cHN0YXRlLAogCQkJCQkJCQkJCWNvbnN0cmFpbnQtPmxvY2F0aW9uKSkpOwotCi0J CS8qCi0JCSAqIFRPRE86IFN0cmFpZ2h0Zm9yd2FyZCBub3QtbnVsbCBjb25zdHJhaW50cyB3b24n dCB3b3JrIG9uIHZpcnR1YWwKLQkJICogZ2VuZXJhdGVkIGNvbHVtbnMsIGJlY2F1c2UgdGhlcmUg aXMgbm8gc3VwcG9ydCBmb3IgZXhwYW5kaW5nIHRoZQotCQkgKiBjb2x1bW4gd2hlbiB0aGUgY29u c3RyYWludCBpcyBjaGVja2VkLiAgTWF5YmUgd2UgY291bGQgY29udmVydCB0aGUKLQkJICogbm90 LW51bGwgY29uc3RyYWludCBpbnRvIGEgZnVsbCBjaGVjayBjb25zdHJhaW50LCBzbyB0aGF0IHRo ZQotCQkgKiBnZW5lcmF0aW9uIGV4cHJlc3Npb24gY2FuIGJlIGV4cGFuZGVkIGF0IGNoZWNrIHRp bWUuCi0JCSAqLwotCQlpZiAoY29sdW1uLT5pc19ub3RfbnVsbCAmJiBjb2x1bW4tPmdlbmVyYXRl ZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRVQUwpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCSBlcnJtc2co Im5vdC1udWxsIGNvbnN0cmFpbnRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHZpcnR1YWwgZ2VuZXJh dGVkIGNvbHVtbnMiKSwKLQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihjeHQtPnBzdGF0ZSwKLQkJ CQkJCQkJCQljb25zdHJhaW50LT5sb2NhdGlvbikpKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9k ZXMuaAppbmRleCBlMmQxZGMxZTA2Li4xNTk1ZmFlMjE1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApA QCAtNTQ4LDYgKzU0OCw4IEBAIHR5cGVkZWYgc3RydWN0IFJlc3VsdFJlbEluZm8KIAkvKiBhcnJh eSBvZiBjb25zdHJhaW50LWNoZWNraW5nIGV4cHIgc3RhdGVzICovCiAJRXhwclN0YXRlICoqcmlf Q29uc3RyYWludEV4cHJzOwogCisJLyogYXJyYXkgb2YgdmlydHVhbCBnZW5lcmF0ZWQgbm90IG51 bGwgY29uc3RyYWludC1jaGVja2luZyBleHByIHN0YXRlcyAqLworCUV4cHJTdGF0ZSAqKnJpX1Zp ckdlbmVyYXRlZENvbnN0cmFpbnRFeHByczsKIAkvKgogCSAqIEFycmF5cyBvZiBzdG9yZWQgZ2Vu ZXJhdGVkIGNvbHVtbnMgRXhwclN0YXRlcyBmb3IgSU5TRVJUL1VQREFURS9NRVJHRS4KIAkgKi8K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQKaW5k ZXggMzU2Mzg4MTJiZS4uODI2Yzc2YjkwMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQKQEAgLTY2MCwyOCArNjYwLDI1IEBAIElOU0VSVCBJ TlRPIGd0ZXN0MjBjIFZBTFVFUyAoMSk7ICAtLSBvawogSU5TRVJUIElOVE8gZ3Rlc3QyMGMgVkFM VUVTIChOVUxMKTsgIC0tIGZhaWxzCiBFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJndGVz dDIwYyIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAid2hvbGVfcm93X2NoZWNrIgogREVUQUlM OiAgRmFpbGluZyByb3cgY29udGFpbnMgKG51bGwsIHZpcnR1YWwpLgotLS0gbm90LW51bGwgY29u c3RyYWludHMgKGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkKQogQ1JFQVRFIFRBQkxFIGd0ZXN0MjFh IChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAobnVsbGlmKGEs IDApKSBWSVJUVUFMIE5PVCBOVUxMKTsKLUVSUk9SOiAgbm90LW51bGwgY29uc3RyYWludHMgYXJl IG5vdCBzdXBwb3J0ZWQgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucwotTElORSAxOiAuLi4g YiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAobnVsbGlmKGEsIDApKSBWSVJUVUFMIE5PVCBOVUxM KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBeCi0tLUlOU0VSVCBJTlRPIGd0ZXN0MjFhIChhKSBWQUxVRVMgKDEpOyAgLS0gb2sK LS0tSU5TRVJUIElOVE8gZ3Rlc3QyMWEgKGEpIFZBTFVFUyAoMCk7ICAtLSB2aW9sYXRlcyBjb25z dHJhaW50CitJTlNFUlQgSU5UTyBndGVzdDIxYSAoYSkgVkFMVUVTICgxKTsgIC0tIG9rCitJTlNF UlQgSU5UTyBndGVzdDIxYSAoYSkgVkFMVUVTICgwKTsgIC0tIHZpb2xhdGVzIGNvbnN0cmFpbnQK K0VSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gImIiIG9mIHJlbGF0aW9uICJndGVzdDIxYSIg dmlvbGF0ZXMgbm90LW51bGwgY29uc3RyYWludAorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFp bnMgKDAsIHZpcnR1YWwpLgogLS0gYWxzbyBjaGVjayB3aXRoIHRhYmxlIGNvbnN0cmFpbnQgc3lu dGF4CiBDUkVBVEUgVEFCTEUgZ3Rlc3QyMWF4IChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQgR0VO RVJBVEVEIEFMV0FZUyBBUyAobnVsbGlmKGEsIDApKSBWSVJUVUFMLCBDT05TVFJBSU5UIGNjIE5P VCBOVUxMIGIpOyAgLS0gZXJyb3IKLUVSUk9SOiAgbm90LW51bGwgY29uc3RyYWludHMgYXJlIG5v dCBzdXBwb3J0ZWQgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucworRFJPUCBUQUJMRSBndGVz dDIxYXg7CiBDUkVBVEUgVEFCTEUgZ3Rlc3QyMWF4IChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQg R0VORVJBVEVEIEFMV0FZUyBBUyAobnVsbGlmKGEsIDApKSBWSVJUVUFMKTsKIEFMVEVSIFRBQkxF IGd0ZXN0MjFheCBBREQgQ09OU1RSQUlOVCBjYyBOT1QgTlVMTCBiOyAgLS0gZXJyb3IKLUVSUk9S OiAgbm90LW51bGwgY29uc3RyYWludHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdmlydHVhbCBnZW5l cmF0ZWQgY29sdW1ucwogRFJPUCBUQUJMRSBndGVzdDIxYXg7CiBDUkVBVEUgVEFCTEUgZ3Rlc3Qy MWIgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChudWxsaWYo YSwgMCkpIFZJUlRVQUwpOwogQUxURVIgVEFCTEUgZ3Rlc3QyMWIgQUxURVIgQ09MVU1OIGIgU0VU IE5PVCBOVUxMOwotRVJST1I6ICBub3QtbnVsbCBjb25zdHJhaW50cyBhcmUgbm90IHN1cHBvcnRl ZCBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zCi1ERVRBSUw6ICBDb2x1bW4gImIiIG9mIHJl bGF0aW9uICJndGVzdDIxYiIgaXMgYSB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4uCi0tLUlOU0VS VCBJTlRPIGd0ZXN0MjFiIChhKSBWQUxVRVMgKDEpOyAgLS0gb2sKLS0tSU5TRVJUIElOVE8gZ3Rl c3QyMWIgKGEpIFZBTFVFUyAoMCk7ICAtLSB2aW9sYXRlcyBjb25zdHJhaW50CitJTlNFUlQgSU5U TyBndGVzdDIxYiAoYSkgVkFMVUVTICgxKTsgIC0tIG9rCitJTlNFUlQgSU5UTyBndGVzdDIxYiAo YSkgVkFMVUVTICgyKSwgKDApOyAgLS0gdmlvbGF0ZXMgY29uc3RyYWludAorRVJST1I6ICBudWxs IHZhbHVlIGluIGNvbHVtbiAiYiIgb2YgcmVsYXRpb24gImd0ZXN0MjFiIiB2aW9sYXRlcyBub3Qt bnVsbCBjb25zdHJhaW50CitERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAoMCwgdmlydHVh bCkuCiBBTFRFUiBUQUJMRSBndGVzdDIxYiBBTFRFUiBDT0xVTU4gYiBEUk9QIE5PVCBOVUxMOwot LS1JTlNFUlQgSU5UTyBndGVzdDIxYiAoYSkgVkFMVUVTICgwKTsgIC0tIG9rIG5vdworSU5TRVJU IElOVE8gZ3Rlc3QyMWIgKGEpIFZBTFVFUyAoMCk7ICAtLSBvayBub3cKIC0tIGluZGV4IGNvbnN0 cmFpbnRzCiBDUkVBVEUgVEFCTEUgZ3Rlc3QyMmEgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCBH RU5FUkFURUQgQUxXQVlTIEFTIChhIC8gMikgVklSVFVBTCBVTklRVUUpOwogRVJST1I6ICB1bmlx dWUgY29uc3RyYWludHMgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBhcmUgbm90IHN1cHBv cnRlZApAQCAtNjg5LDcgKzY4Niw3IEBAIEVSUk9SOiAgdW5pcXVlIGNvbnN0cmFpbnRzIG9uIHZp cnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgYXJlIG5vdCBzdXBwb3J0ZWQKIC0tSU5TRVJUIElOVE8g Z3Rlc3QyMmEgVkFMVUVTICgzKTsKIC0tSU5TRVJUIElOVE8gZ3Rlc3QyMmEgVkFMVUVTICg0KTsK IENSRUFURSBUQUJMRSBndGVzdDIyYiAoYSBpbnQsIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMg KGEgLyAyKSBWSVJUVUFMLCBQUklNQVJZIEtFWSAoYSwgYikpOwotRVJST1I6ICBub3QtbnVsbCBj b25zdHJhaW50cyBhcmUgbm90IHN1cHBvcnRlZCBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5z CitFUlJPUjogIHVuaXF1ZSBjb25zdHJhaW50cyBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5z IGFyZSBub3Qgc3VwcG9ydGVkCiAtLUlOU0VSVCBJTlRPIGd0ZXN0MjJiIFZBTFVFUyAoMik7CiAt LUlOU0VSVCBJTlRPIGd0ZXN0MjJiIFZBTFVFUyAoMik7CiAtLSBpbmRleGVzCkBAIC03MzQsNyAr NzMxLDcgQEAgRVJST1I6ICBmb3JlaWduIGtleSBjb25zdHJhaW50cyBvbiB2aXJ0dWFsIGdlbmVy YXRlZCBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVkCiAtLURST1AgVEFCTEUgZ3Rlc3QyM2I7CiAt LURST1AgVEFCTEUgZ3Rlc3QyM2E7CiBDUkVBVEUgVEFCTEUgZ3Rlc3QyM3AgKHggaW50LCB5IGlu dCBHRU5FUkFURUQgQUxXQVlTIEFTICh4ICogMikgVklSVFVBTCwgUFJJTUFSWSBLRVkgKHkpKTsK LUVSUk9SOiAgbm90LW51bGwgY29uc3RyYWludHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdmlydHVh bCBnZW5lcmF0ZWQgY29sdW1ucworRVJST1I6ICB1bmlxdWUgY29uc3RyYWludHMgb24gdmlydHVh bCBnZW5lcmF0ZWQgY29sdW1ucyBhcmUgbm90IHN1cHBvcnRlZAogLS1JTlNFUlQgSU5UTyBndGVz dDIzcCBWQUxVRVMgKDEpLCAoMiksICgzKTsKIENSRUFURSBUQUJMRSBndGVzdDIzcSAoYSBpbnQg UFJJTUFSWSBLRVksIGIgaW50IFJFRkVSRU5DRVMgZ3Rlc3QyM3AgKHkpKTsKIEVSUk9SOiAgcmVs YXRpb24gImd0ZXN0MjNwIiBkb2VzIG5vdCBleGlzdApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2Vu ZXJhdGVkX3ZpcnR1YWwuc3FsCmluZGV4IDM0ODcwODEzOTEuLjFhYzkyYjIyMDQgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9nZW5lcmF0ZWRfdmlydHVhbC5zcWwKQEAgLTMzMiwyMyArMzMyLDIz IEBAIEFMVEVSIFRBQkxFIGd0ZXN0MjBjIEFERCBDT05TVFJBSU5UIHdob2xlX3Jvd19jaGVjayBD SEVDSyAoZ3Rlc3QyMGMgSVMgTk9UIE5VTEwpCiBJTlNFUlQgSU5UTyBndGVzdDIwYyBWQUxVRVMg KDEpOyAgLS0gb2sKIElOU0VSVCBJTlRPIGd0ZXN0MjBjIFZBTFVFUyAoTlVMTCk7ICAtLSBmYWls cwogCi0tLSBub3QtbnVsbCBjb25zdHJhaW50cyAoY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQpCiBD UkVBVEUgVEFCTEUgZ3Rlc3QyMWEgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCBHRU5FUkFURUQg QUxXQVlTIEFTIChudWxsaWYoYSwgMCkpIFZJUlRVQUwgTk9UIE5VTEwpOwotLS1JTlNFUlQgSU5U TyBndGVzdDIxYSAoYSkgVkFMVUVTICgxKTsgIC0tIG9rCi0tLUlOU0VSVCBJTlRPIGd0ZXN0MjFh IChhKSBWQUxVRVMgKDApOyAgLS0gdmlvbGF0ZXMgY29uc3RyYWludAorSU5TRVJUIElOVE8gZ3Rl c3QyMWEgKGEpIFZBTFVFUyAoMSk7ICAtLSBvaworSU5TRVJUIElOVE8gZ3Rlc3QyMWEgKGEpIFZB TFVFUyAoMCk7ICAtLSB2aW9sYXRlcyBjb25zdHJhaW50CiAKIC0tIGFsc28gY2hlY2sgd2l0aCB0 YWJsZSBjb25zdHJhaW50IHN5bnRheAogQ1JFQVRFIFRBQkxFIGd0ZXN0MjFheCAoYSBpbnQgUFJJ TUFSWSBLRVksIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKG51bGxpZihhLCAwKSkgVklSVFVB TCwgQ09OU1RSQUlOVCBjYyBOT1QgTlVMTCBiKTsgIC0tIGVycm9yCitEUk9QIFRBQkxFIGd0ZXN0 MjFheDsKIENSRUFURSBUQUJMRSBndGVzdDIxYXggKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCBH RU5FUkFURUQgQUxXQVlTIEFTIChudWxsaWYoYSwgMCkpIFZJUlRVQUwpOwogQUxURVIgVEFCTEUg Z3Rlc3QyMWF4IEFERCBDT05TVFJBSU5UIGNjIE5PVCBOVUxMIGI7ICAtLSBlcnJvcgogRFJPUCBU QUJMRSBndGVzdDIxYXg7CiAKIENSRUFURSBUQUJMRSBndGVzdDIxYiAoYSBpbnQgUFJJTUFSWSBL RVksIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKG51bGxpZihhLCAwKSkgVklSVFVBTCk7CiBB TFRFUiBUQUJMRSBndGVzdDIxYiBBTFRFUiBDT0xVTU4gYiBTRVQgTk9UIE5VTEw7Ci0tLUlOU0VS VCBJTlRPIGd0ZXN0MjFiIChhKSBWQUxVRVMgKDEpOyAgLS0gb2sKLS0tSU5TRVJUIElOVE8gZ3Rl c3QyMWIgKGEpIFZBTFVFUyAoMCk7ICAtLSB2aW9sYXRlcyBjb25zdHJhaW50CitJTlNFUlQgSU5U TyBndGVzdDIxYiAoYSkgVkFMVUVTICgxKTsgIC0tIG9rCitJTlNFUlQgSU5UTyBndGVzdDIxYiAo YSkgVkFMVUVTICgyKSwgKDApOyAgLS0gdmlvbGF0ZXMgY29uc3RyYWludAogQUxURVIgVEFCTEUg Z3Rlc3QyMWIgQUxURVIgQ09MVU1OIGIgRFJPUCBOT1QgTlVMTDsKLS0tSU5TRVJUIElOVE8gZ3Rl c3QyMWIgKGEpIFZBTFVFUyAoMCk7ICAtLSBvayBub3cKK0lOU0VSVCBJTlRPIGd0ZXN0MjFiIChh KSBWQUxVRVMgKDApOyAgLS0gb2sgbm93CiAKIC0tIGluZGV4IGNvbnN0cmFpbnRzCiBDUkVBVEUg VEFCTEUgZ3Rlc3QyMmEgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCBHRU5FUkFURUQgQUxXQVlT IEFTIChhIC8gMikgVklSVFVBTCBVTklRVUUpOwotLSAKMi4zNC4xCgo= --000000000000d4fdc5062dc9c352--