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 1wEcZe-004DKr-2a for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Apr 2026 00:33:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wEcZc-00GwYx-13 for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Apr 2026 00:33:12 +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.96) (envelope-from ) id 1wEcZb-00GwYp-38 for pgsql-hackers@lists.postgresql.org; Mon, 20 Apr 2026 00:33:12 +0000 Received: from mail-ua1-x929.google.com ([2607:f8b0:4864:20::929]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wEcZZ-0000000236S-3XS2 for pgsql-hackers@lists.postgresql.org; Mon, 20 Apr 2026 00:33:11 +0000 Received: by mail-ua1-x929.google.com with SMTP id a1e0cc1a2514c-94ac7f22d23so497490241.3 for ; Sun, 19 Apr 2026 17:33:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776645187; cv=none; d=google.com; s=arc-20240605; b=C0LfLMwqbF8FMfJZB0hdgIqs3efe3UGD2N4wqGwtr9J3hyro6pvaP68FGVAlew8W8r Eoyz59vu6E7YEEipGp9YO9HeLKXUaHResayncQFqeonbGq/h5NdMjvtYrX230hOmeCVS QeZjHs9ZhNWC9i+nzeKb9TK/n+cAY/xTaj9P9UekBI30SwAKh7c9hgwVnNzTSijY9Oe9 MLQlRh37puaM+vNFMihNvk8qXM9rqCJOOxge9O3pOauIa5aiCq66p9UlrwOi1CLliARl Weme3kjeETobgQgZqA6dPSWHkDF21h/pc7G15j0NKFrIFjSdc2/0gDpbPw8H9kEkjNF1 QU8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=8nSAT4MWG7+kUBIbj5M62I3ZGYDWnqk4AVcvqPxxyjY=; fh=3tYH/hSrrcFXDNFZxQ87rOAxyC9W9gdzqfcTcCbnQxk=; b=PigejfVMNzOajZO94VkgNEuIvEk6sT5gLlzE/eV+Ri8X3H+xRbmc9hKY9/td52htvL HtpZYwKh5x3Hav6sfNnkitBz9sHJI2YTTMxVWDI7W83tQBTuNj2pk3i38ff/FyGRQbf0 aMDXQ7DheLkvtsgnUqlzHEyErAZF1iVl7JdtXMQAFr0p77RvEoQiB086MOCLTOFvUbVx N38i8MYxSYCmkXTRraq6z/dKU5nOi4GSm1OvNNjp9kPa5FN33kzt9+SB5ophkSDqr6MV wlhcaC+R0/vdvvxYG6nY7HkTSXBij4ynV6dgSTjHiEteU6QOzkYmb/ZcJlq8DNQJFvL1 oR2Q==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776645187; x=1777249987; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=8nSAT4MWG7+kUBIbj5M62I3ZGYDWnqk4AVcvqPxxyjY=; b=luvdEfTB0XYdeoYqCw8rnQSf2kauCDxfXwcSuRhWEughx06AZDuBlIAYvoxz/yQu+w VnnnGPMIvzb50lAi2wgr1o93kpZLiimbqnw2za5NWMDbxwuShMTyAv6GjxOLxBE2uMiZ 1CM2Qh0SO8WBANhhsOJxRRXddC0woaPanYIcqUabz+42ccOZOaiJ/Xdq0z3TabgrvvGK cYjL8hYjLIczjyY6KCXBP6fAroIOv5qm3MELv1mH0WGOS6FF7RjBDhU1pptjr8/qyygH Wn4wV5SxZqq/PhZCXE0Kwehn/qupCrEbx76PSAlbnEXErQ60mVc4bta6i3B5yi2sjFMG Jfzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776645187; x=1777249987; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=8nSAT4MWG7+kUBIbj5M62I3ZGYDWnqk4AVcvqPxxyjY=; b=agUGfxHw1YdR2hu0JcGuwPzux/REbeMD7zbSTRASelsHVi20BAKeMA173fwXJ+WHVp yWEsirBB21zTIx/SYMm+54oJQ0D3gWRB1iatgxwR2EQe7V4CkoOG1tiG4qyG9D8Oqq3H gHbykRFRDCY8kmxxotWKg+ekdS4gx78croVa7HHWrNs/eb0zHrQB8Ukd7aH0q/U8ac3F +yn7xAw1qoVFsrJ/46FPziOqYDjTNmmCRixWjF+aXbSxrD76MEZVemL5SAJl6RCAMbAg m+Qyg47mqQU6FAUVFqiGaNfCxm0BMliTZTyRqvHeGqjz3x2bLjGRx5bAfRXdplVU5N28 fkfA== X-Gm-Message-State: AOJu0YzZpCU9TecRwlkDm066xo/GLo19scptJs/O/M9WPSkb9h3azsok BhoAtZIOU0SM+FgvTmWQmpP0gq6scIzoVuM6ydBpmm1/dMPO5GrlhemSCR1FVDkoWYSB/k242u/ vpU8LdGfTnZcYOx67w8zN6AdiFIElJqA= X-Gm-Gg: AeBDieuAsGV8Q4RYHADXrZF0nKQrnUJfFPksg8WIlp+zsxB8ScUnztRNC8+f/BdiFHI Q+X3p7A9gfrOYm+rg+TrcC20DT7pkc1HncqIOTa5rakuVsa3HH53hIEkKlUNTrMr0LNNSeGj5t6 91JmLgQfRGnSaR9BVchb8vbxxwLlYQzQgEhkziWHLjw6ACfNVOd1TYl77PXOT4zP2Bt0vft0HQE jsvoEw22H0i4gYAilqo5g2OkO8cU1ldiDa1q0njUvKB3BQkJmQKzbdC5lv7/LW7I8G8JtpF9DhS yL2N1MgXie1QvhWtwQ== X-Received: by 2002:a05:6102:3a11:b0:608:94e3:bd89 with SMTP id ada2fe7eead31-616f5eb9cd4mr4293778137.1.1776645187370; Sun, 19 Apr 2026 17:33:07 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: SATYANARAYANA NARLAPURAM Date: Sun, 19 Apr 2026 17:32:55 -0700 X-Gm-Features: AQROBzAPpP-NL1_uhyJYgPUSZlwecj4xn0mBawZ7sGK0m-5f9Qx7YReWLJaQ03I Message-ID: Subject: Re: [BUG]: WHERE CURRENT OF cursor fail on tables that have virtual generated columns To: Dean Rasheed Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000049210d064fd97136" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000049210d064fd97136 Content-Type: multipart/alternative; boundary="00000000000049210a064fd97134" --00000000000049210a064fd97134 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable HI, On Sun, Apr 19, 2026 at 3:42=E2=80=AFAM Dean Rasheed wrote: > On Fri, 17 Apr 2026 at 21:04, SATYANARAYANA NARLAPURAM > wrote: > > > > Hi hackers, > > > > UPDATE and DELETE with WHERE CURRENT OF cursor fail on tables that have > virtual generated columns, erroring with "WHERE CURRENT OF on a view is n= ot > implemented" even though the target is a regular table, not a view. > > > > Nice catch! > > > Analysis: > > The bug stems from replace_rte_variables_mutator() in rewriteManip.c, > which unconditionally errors on any CurrentOfExpr referencing the target > relation. This appears to a check designed for view rewriting, where WHER= E > CURRENT OF cannot be translated through a view. However, virtual generate= d > column (VGC) expansion also routes through this mutator. The rewriter's > expand_generated_columns_internal() calls ReplaceVarsFromTargetList(), an= d > the planner's expand_virtual_generated_columns() calls > pullup_replace_vars(), which calls replace_rte_variables(). Since virtual > generated columns use same mutator, while expanding virtual generated > columns returns the same error even though the table is not a view and th= e > cursor position is perfectly valid. > > > > The fix adds bool error_on_current_of to replace_rte_variables_context. > The existing replace_rte_variables() is refactored into a static > replace_rte_variables_internal() that accepts the flag, with two public > wrappers: replace_rte_variables() (passes true, preserving existing > behavior) and replace_rte_variables_ext() (exposes the flag). The same > pattern is applied to ReplaceVarsFromTargetList() / > ReplaceVarsFromTargetListExtended(). In replace_rte_variables_mutator(), > the CurrentOfExpr error is now conditional on context->error_on_current_o= f. > The two VGC expansion call sites pass false; all other callers pass true. > The down side of this approach is that it is adding additional public API= . > > > > Hmm, it seems to me that a much simpler fix is to check for use of > WHERE CURRENT OF on a view at parse time, and throw the error there. > This patch looks simple and neat, is there any reason why it was done differently earlier? > Then the problematic rewriter check can simply be removed, as in the > attached v2 patch. > I reviewed the patch, and it addresses the original bug and other existing tests. I verified it rejects the view with WHERE CURRENT OF on update and delete. Updated the patch to include a test case to reject view update with WHERE CURRENT OF. Thanks, Satya --00000000000049210a064fd97134 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
HI,

On Sun, Apr 19, = 2026 at 3:42=E2=80=AFAM Dean Rasheed <dean.a.rasheed@gmail.com> wrote:
On Fri, 17 Apr 2026 at 21:04, SATYANARAYA= NA NARLAPURAM
<satyanar= lapuram@gmail.com> wrote:
>
> Hi hackers,
>
> UPDATE and DELETE with WHERE CURRENT OF cursor fail on tables that hav= e virtual generated columns, erroring with "WHERE CURRENT OF on a view= is not implemented" even though the target is a regular table, not a = view.
>

Nice catch!

> Analysis:
> The bug stems from replace_rte_variables_mutator() in rewriteManip.c, = which unconditionally errors on any CurrentOfExpr referencing the target re= lation. This appears to a check designed for view rewriting, where WHERE CU= RRENT OF cannot be translated through a view. However, virtual generated co= lumn (VGC) expansion also routes through this mutator. The rewriter's e= xpand_generated_columns_internal() calls ReplaceVarsFromTargetList(), and t= he planner's expand_virtual_generated_columns() calls pullup_replace_va= rs(), which calls replace_rte_variables(). Since virtual generated columns = use same mutator, while expanding virtual generated columns returns the sam= e error even though the table is not a view and the cursor position is perf= ectly valid.
>
> The fix adds bool error_on_current_of to replace_rte_variables_context= . The existing replace_rte_variables() is refactored into a static replace_= rte_variables_internal() that accepts the flag, with two public wrappers: r= eplace_rte_variables() (passes true, preserving existing behavior) and repl= ace_rte_variables_ext() (exposes the flag). The same pattern is applied to = ReplaceVarsFromTargetList() / ReplaceVarsFromTargetListExtended(). In repla= ce_rte_variables_mutator(), the CurrentOfExpr error is now conditional on c= ontext->error_on_current_of. The two VGC expansion call sites pass false= ; all other callers pass true. The down side of this approach is that it is= adding additional public API.
>

Hmm, it seems to me that a much simpler fix is to check for use of
WHERE CURRENT OF on a view at parse time, and throw the error there.

This patch looks simple and neat, is there an= y reason why it was done differently earlier?

=C2= =A0
Then the problematic rewriter check can simply be removed, as in the
attached v2 patch.

I reviewed the patch= , and it addresses the original bug and other existing tests.
I v= erified it rejects the view with WHERE CURRENT OF on update and delete.

Updated the patch to include a test case to reject vi= ew update with WHERE CURRENT OF.

Thanks,
Satya
--00000000000049210a064fd97134-- --00000000000049210d064fd97136 Content-Type: application/octet-stream; name="v3-0001-vgc-where-current-of-fix.patch" Content-Disposition: attachment; filename="v3-0001-vgc-where-current-of-fix.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo6gnu2d0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMgYi9zcmMvYmFja2VuZC9w YXJzZXIvYW5hbHl6ZS5jCmluZGV4IDg0ZGVlZDlhLi5kOTg0NTM1OCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvYW5hbHl6 ZS5jCkBAIC01OTUsNiArNTk1LDE0IEBAIHRyYW5zZm9ybURlbGV0ZVN0bXQoUGFyc2VTdGF0ZSAq cHN0YXRlLCBEZWxldGVTdG10ICpzdG10KQogCQkJCQkJCQkJCSBBQ0xfREVMRVRFKTsKIAluc2l0 ZW0gPSBwc3RhdGUtPnBfdGFyZ2V0X25zaXRlbTsKIAorCS8qIGRpc2FsbG93IERFTEVURSAuLi4g V0hFUkUgQ1VSUkVOVCBPRiBvbiBhIHZpZXcgKi8KKwlpZiAoc3RtdC0+d2hlcmVDbGF1c2UgJiYK KwkJSXNBKHN0bXQtPndoZXJlQ2xhdXNlLCBDdXJyZW50T2ZFeHByKSAmJgorCQlwc3RhdGUtPnBf dGFyZ2V0X3JlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9WSUVXKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAor CQkJCWVycm1zZygiV0hFUkUgQ1VSUkVOVCBPRiBvbiBhIHZpZXcgaXMgbm90IGltcGxlbWVudGVk IikpOworCiAJLyogdGhlcmUncyBubyBESVNUSU5DVCBpbiBERUxFVEUgKi8KIAlxcnktPmRpc3Rp bmN0Q2xhdXNlID0gTklMOwogCkBAIC0yODY4LDYgKzI4NzYsMTQgQEAgdHJhbnNmb3JtVXBkYXRl U3RtdChQYXJzZVN0YXRlICpwc3RhdGUsIFVwZGF0ZVN0bXQgKnN0bXQpCiAJCQkJCQkJCQkJIHRy dWUsCiAJCQkJCQkJCQkJIEFDTF9VUERBVEUpOwogCisJLyogZGlzYWxsb3cgVVBEQVRFIC4uLiBX SEVSRSBDVVJSRU5UIE9GIG9uIGEgdmlldyAqLworCWlmIChzdG10LT53aGVyZUNsYXVzZSAmJgor CQlJc0Eoc3RtdC0+d2hlcmVDbGF1c2UsIEN1cnJlbnRPZkV4cHIpICYmCisJCXBzdGF0ZS0+cF90 YXJnZXRfcmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1ZJRVcpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJ CQkJZXJybXNnKCJXSEVSRSBDVVJSRU5UIE9GIG9uIGEgdmlldyBpcyBub3QgaW1wbGVtZW50ZWQi KSk7CisKIAlpZiAoc3RtdC0+Zm9yUG9ydGlvbk9mKQogCQlxcnktPmZvclBvcnRpb25PZiA9IHRy YW5zZm9ybUZvclBvcnRpb25PZkNsYXVzZShwc3RhdGUsCiAJCQkJCQkJCQkJCQkJCXFyeS0+cmVz dWx0UmVsYXRpb24sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5p cC5jIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlTWFuaXAuYwppbmRleCA0YmY0YWEwZC4u OWFhN2VmNjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMK KysrIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlTWFuaXAuYwpAQCAtMTUxNCwyNSArMTUx NCw2IEBAIHJlcGxhY2VfcnRlX3ZhcmlhYmxlc19tdXRhdG9yKE5vZGUgKm5vZGUsCiAJCX0KIAkJ Lyogb3RoZXJ3aXNlIGZhbGwgdGhyb3VnaCB0byBjb3B5IHRoZSB2YXIgbm9ybWFsbHkgKi8KIAl9 Ci0JZWxzZSBpZiAoSXNBKG5vZGUsIEN1cnJlbnRPZkV4cHIpKQotCXsKLQkJQ3VycmVudE9mRXhw ciAqY2V4cHIgPSAoQ3VycmVudE9mRXhwciAqKSBub2RlOwotCi0JCWlmIChjZXhwci0+Y3Zhcm5v ID09IGNvbnRleHQtPnRhcmdldF92YXJubyAmJgotCQkJY29udGV4dC0+c3VibGV2ZWxzX3VwID09 IDApCi0JCXsKLQkJCS8qCi0JCQkgKiBXZSBnZXQgaGVyZSBpZiBhIFdIRVJFIENVUlJFTlQgT0Yg ZXhwcmVzc2lvbiB0dXJucyBvdXQgdG8gYXBwbHkKLQkJCSAqIHRvIGEgdmlldy4gIFNvbWVkYXkg d2UgbWlnaHQgYmUgYWJsZSB0byB0cmFuc2xhdGUgdGhlCi0JCQkgKiBleHByZXNzaW9uIHRvIGFw cGx5IHRvIGFuIHVuZGVybHlpbmcgdGFibGUgb2YgdGhlIHZpZXcsIGJ1dAotCQkJICogcmlnaHQg bm93IGl0J3Mgbm90IGltcGxlbWVudGVkLgotCQkJICovCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCSBlcnJtc2co IldIRVJFIENVUlJFTlQgT0Ygb24gYSB2aWV3IGlzIG5vdCBpbXBsZW1lbnRlZCIpKSk7Ci0JCX0K LQkJLyogb3RoZXJ3aXNlIGZhbGwgdGhyb3VnaCB0byBjb3B5IHRoZSBleHByIG5vcm1hbGx5ICov Ci0JfQogCWVsc2UgaWYgKElzQShub2RlLCBRdWVyeSkpCiAJewogCQkvKiBSZWN1cnNlIGludG8g UlRFIHN1YnF1ZXJ5IG9yIG5vdC15ZXQtcGxhbm5lZCBzdWJsaW5rIHN1YnF1ZXJ5ICovCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92aXJ0dWFsLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0CmluZGV4IGZj NDFjNDgwLi41OGNkZjMxMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9n ZW5lcmF0ZWRfdmlydHVhbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nZW5l cmF0ZWRfdmlydHVhbC5vdXQKQEAgLTE3MjMsMyArMTcyMyw1NyBAQCBzZWxlY3QgKiBmcm9tIGd0 ZXN0MzMgd2hlcmUgYiBpcyBudWxsOwogCiByZXNldCBjb25zdHJhaW50X2V4Y2x1c2lvbjsKIGRy b3AgdGFibGUgZ3Rlc3QzMzsKK2NyZWF0ZSB0YWJsZSBndGVzdF9jdXJzb3IgKGlkIGludCBwcmlt YXJ5IGtleSwgYSBpbnQsIGIgaW50IGdlbmVyYXRlZCBhbHdheXMgYXMgKGEgKiAyKSB2aXJ0dWFs KTsKK2luc2VydCBpbnRvIGd0ZXN0X2N1cnNvciB2YWx1ZXMgKDEsIDEwKSwgKDIsIDIwKSwgKDMs IDMwKTsKKy0tIFVQREFURSB2aWEgY3Vyc29yCitiZWdpbjsKK2RlY2xhcmUgY3VyMSBjdXJzb3Ig Zm9yIHNlbGVjdCAqIGZyb20gZ3Rlc3RfY3Vyc29yIG9yZGVyIGJ5IGlkIGZvciB1cGRhdGU7Citm ZXRjaCAxIGZyb20gY3VyMTsKKyBpZCB8IGEgIHwgYiAgCistLS0tKy0tLS0rLS0tLQorICAxIHwg MTAgfCAyMAorKDEgcm93KQorCit1cGRhdGUgZ3Rlc3RfY3Vyc29yIHNldCBhID0gOTkgd2hlcmUg Y3VycmVudCBvZiBjdXIxOworc2VsZWN0ICogZnJvbSBndGVzdF9jdXJzb3Igb3JkZXIgYnkgaWQ7 CisgaWQgfCBhICB8ICBiICAKKy0tLS0rLS0tLSstLS0tLQorICAxIHwgOTkgfCAxOTgKKyAgMiB8 IDIwIHwgIDQwCisgIDMgfCAzMCB8ICA2MAorKDMgcm93cykKKworY29tbWl0OworLS0gREVMRVRF IHZpYSBjdXJzb3IKK2JlZ2luOworZGVjbGFyZSBjdXIyIGN1cnNvciBmb3Igc2VsZWN0ICogZnJv bSBndGVzdF9jdXJzb3Igb3JkZXIgYnkgaWQgZm9yIHVwZGF0ZTsKK2ZldGNoIDEgZnJvbSBjdXIy OworIGlkIHwgYSAgfCAgYiAgCistLS0tKy0tLS0rLS0tLS0KKyAgMSB8IDk5IHwgMTk4CisoMSBy b3cpCisKK2RlbGV0ZSBmcm9tIGd0ZXN0X2N1cnNvciB3aGVyZSBjdXJyZW50IG9mIGN1cjI7Citz ZWxlY3QgKiBmcm9tIGd0ZXN0X2N1cnNvciBvcmRlciBieSBpZDsKKyBpZCB8IGEgIHwgYiAgCist LS0tKy0tLS0rLS0tLQorICAyIHwgMjAgfCA0MAorICAzIHwgMzAgfCA2MAorKDIgcm93cykKKwor Y29tbWl0OworLS0gV0hFUkUgQ1VSUkVOVCBPRiB2aWEgYSB2aWV3IG9uIGEgdGFibGUgd2l0aCBW R0MgKHNob3VsZCBmYWlsKQorY3JlYXRlIHZpZXcgZ3Rlc3RfY3Vyc29yX3ZpZXcgYXMgc2VsZWN0 ICogZnJvbSBndGVzdF9jdXJzb3I7CitiZWdpbjsKK2RlY2xhcmUgY3VyMyBjdXJzb3IgZm9yIHNl bGVjdCAqIGZyb20gZ3Rlc3RfY3Vyc29yX3ZpZXcgZm9yIHVwZGF0ZTsKK2ZldGNoIDEgZnJvbSBj dXIzOworIGlkIHwgYSAgfCBiICAKKy0tLS0rLS0tLSstLS0tCisgIDIgfCAyMCB8IDQwCisoMSBy b3cpCisKK3VwZGF0ZSBndGVzdF9jdXJzb3JfdmlldyBzZXQgYSA9IDU1IHdoZXJlIGN1cnJlbnQg b2YgY3VyMzsgIC0tIGZhaWwKK0VSUk9SOiAgV0hFUkUgQ1VSUkVOVCBPRiBvbiBhIHZpZXcgaXMg bm90IGltcGxlbWVudGVkCityb2xsYmFjazsKK2Ryb3AgdmlldyBndGVzdF9jdXJzb3JfdmlldzsK K2Ryb3AgdGFibGUgZ3Rlc3RfY3Vyc29yOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVk X3ZpcnR1YWwuc3FsCmluZGV4IDliMzI0MTNlLi40OGRhZjMxYSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNxbApAQCAtOTA2LDMgKzkwNiwzMyBAQCBzZWxlY3Qg KiBmcm9tIGd0ZXN0MzMgd2hlcmUgYiBpcyBudWxsOwogCiByZXNldCBjb25zdHJhaW50X2V4Y2x1 c2lvbjsKIGRyb3AgdGFibGUgZ3Rlc3QzMzsKKworY3JlYXRlIHRhYmxlIGd0ZXN0X2N1cnNvciAo aWQgaW50IHByaW1hcnkga2V5LCBhIGludCwgYiBpbnQgZ2VuZXJhdGVkIGFsd2F5cyBhcyAoYSAq IDIpIHZpcnR1YWwpOworaW5zZXJ0IGludG8gZ3Rlc3RfY3Vyc29yIHZhbHVlcyAoMSwgMTApLCAo MiwgMjApLCAoMywgMzApOworCistLSBVUERBVEUgdmlhIGN1cnNvcgorYmVnaW47CitkZWNsYXJl IGN1cjEgY3Vyc29yIGZvciBzZWxlY3QgKiBmcm9tIGd0ZXN0X2N1cnNvciBvcmRlciBieSBpZCBm b3IgdXBkYXRlOworZmV0Y2ggMSBmcm9tIGN1cjE7Cit1cGRhdGUgZ3Rlc3RfY3Vyc29yIHNldCBh ID0gOTkgd2hlcmUgY3VycmVudCBvZiBjdXIxOworc2VsZWN0ICogZnJvbSBndGVzdF9jdXJzb3Ig b3JkZXIgYnkgaWQ7Citjb21taXQ7CisKKy0tIERFTEVURSB2aWEgY3Vyc29yCitiZWdpbjsKK2Rl Y2xhcmUgY3VyMiBjdXJzb3IgZm9yIHNlbGVjdCAqIGZyb20gZ3Rlc3RfY3Vyc29yIG9yZGVyIGJ5 IGlkIGZvciB1cGRhdGU7CitmZXRjaCAxIGZyb20gY3VyMjsKK2RlbGV0ZSBmcm9tIGd0ZXN0X2N1 cnNvciB3aGVyZSBjdXJyZW50IG9mIGN1cjI7CitzZWxlY3QgKiBmcm9tIGd0ZXN0X2N1cnNvciBv cmRlciBieSBpZDsKK2NvbW1pdDsKKworLS0gV0hFUkUgQ1VSUkVOVCBPRiB2aWEgYSB2aWV3IG9u IGEgdGFibGUgd2l0aCBWR0MgKHNob3VsZCBmYWlsKQorY3JlYXRlIHZpZXcgZ3Rlc3RfY3Vyc29y X3ZpZXcgYXMgc2VsZWN0ICogZnJvbSBndGVzdF9jdXJzb3I7CitiZWdpbjsKK2RlY2xhcmUgY3Vy MyBjdXJzb3IgZm9yIHNlbGVjdCAqIGZyb20gZ3Rlc3RfY3Vyc29yX3ZpZXcgZm9yIHVwZGF0ZTsK K2ZldGNoIDEgZnJvbSBjdXIzOwordXBkYXRlIGd0ZXN0X2N1cnNvcl92aWV3IHNldCBhID0gNTUg d2hlcmUgY3VycmVudCBvZiBjdXIzOyAgLS0gZmFpbAorcm9sbGJhY2s7Citkcm9wIHZpZXcgZ3Rl c3RfY3Vyc29yX3ZpZXc7CisKK2Ryb3AgdGFibGUgZ3Rlc3RfY3Vyc29yOwo= --00000000000049210d064fd97136--