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 1wMx6H-000Su4-0Q for pgsql-hackers@arkaria.postgresql.org; Wed, 13 May 2026 00:05:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wMx6F-006Tg6-2v for pgsql-hackers@arkaria.postgresql.org; Wed, 13 May 2026 00:05:20 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wMx6F-006Tfx-15 for pgsql-hackers@lists.postgresql.org; Wed, 13 May 2026 00:05:19 +0000 Received: from mail-ot1-x331.google.com ([2607:f8b0:4864:20::331]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wMx6C-00000000Hku-3LR8 for pgsql-hackers@lists.postgresql.org; Wed, 13 May 2026 00:05:18 +0000 Received: by mail-ot1-x331.google.com with SMTP id 46e09a7af769-7dbd801138eso3232641a34.1 for ; Tue, 12 May 2026 17:05:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1778630716; cv=none; d=google.com; s=arc-20240605; b=j8ZpxGdjXLeZX28tceEMGqAvCKkC4iIe7t31nsCQCfsR8VrOE3+HTqLQL7Wpils4CJ w5HnkuljIlubCoH8SXxlVV8rJYLQeCvQrFVOLZCF4wVlJ+iAq3T4CNS+ByiiqDzMP95E kArdRcttlGA+ZTnIMq7b3CJSpJ7odW7BKOSPVBTeVjdTtLiwQVrtNE+YGxdSaSUfiZzD r4aPxN46nznG3Xt53Wz4RLbnpiihp9rXwpiuGNDICLVO/45wCqFxAmiFCuh5CTizjgPI A54eCvPmXDp4qwlObBwtxgaEUaEYD1CmxyLiQBxufjxOjxcA9WkXAoG1P9czVhGTH6Os 4gKg== 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=G9XqRXcrkl6b52ypuUpUcael17Z4N7bMWUp88NyURQo=; fh=y73qnj/TwvsLUQ3EleFJ9hnLuKALLTJ6FTpn+Kk5kic=; b=RWm7IKLxCY7es3opZetX8ZFD6ZTL/J2QQHnsyhBW8wScMFyQA+hmr1wW27AZsU3knc l4uT4MkxlSwEr3hMX7AYccZJKZ6PxqpDpoZ4q8Pci/0pL8bbJ3pZgXFrGaCpGtKZoJ2z HFc+C5ATDn/WUdERvT22g2oFHAzqvaEE8qeVdpiLAJb/+djCKvh2a8aa4kAvqT1WJko0 9N2di4+Iavo7wbMTAGUMRpv0XWM1DxDeL2tIwl3LrVsXEBRuqL0C7GDASS3UjOQqAxgl hN7i2YD3uriSt93ktPK6mazXKOOHjk3SrOOzRPG86nSDm8/oCGS+NtZS29rRBISgJxut JPqQ==; 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=illuminatedcomputing-com.20251104.gappssmtp.com; s=20251104; t=1778630716; x=1779235516; 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=G9XqRXcrkl6b52ypuUpUcael17Z4N7bMWUp88NyURQo=; b=UmFujpC6kEC/3637D3kEyftCqLzXGPUVN8KZD5LBIm+k4/3fOI9WsqYy6iGKK8HZCb m38TPz+H8vHsmaxl9m7Fik5sQd5ED2FzGtD0fFNAPQp2lAeenkXa21Utw63VMCJe7kzF qGQ0nLDrSuyH2Jud/GkpjoalZEGCyJB59/abvRT65WvDfR9Tm/CCl0t5E1ld9ZVQLq4A v2N32x1vku5NjLq45vIBSCk7mMY1GKcU83ebl41XdugndZmfoiEMKbPstar7ASldzOIO HuwajmC+37pN5lTrEDFt9nZn566z6gAG+760kbBqUnZVXYyehi3zAUXxF4Vrgy/lef02 OjRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778630716; x=1779235516; 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=G9XqRXcrkl6b52ypuUpUcael17Z4N7bMWUp88NyURQo=; b=s+9o9dHxrf2MF2iNa0UEOYxHURA9byL3d6XLeEM97km3RCCEIJkCLKFxkMKrbf68nD e3tTtMSZuSoVu2/wj7kp2EYf6IJwOAmvJ1Q0eczKSa5Pvw942CLjkNPmSZ439hUz9Pci p2d40a35iIt/DB0KL8CY9HRRecO4sys+c0qC8V4wz9UG4mQXYtvnxHtzSRyms/0x8ITq V8Yiiy4why82cmXkKQblNv0WAna4gg6M9By4mUoBZSSFIQSDIyofmll58qMRWrIot/Cg q5xa0Jgw2LwbWkHRy7/YkpJpy0HBl2nFSvyzWuOVGUReZZ9tjazKaxtmyk85Z095BoqK 9jjg== X-Forwarded-Encrypted: i=1; AFNElJ82pStqtjOk+ZTXs2RRsvtebov9weHqWhUh7NRiOVJgnHGr4YloIJZLydDWZqhU4VtUTPe4jcNmyfipJSeI@lists.postgresql.org X-Gm-Message-State: AOJu0YwoDf1/+34Ic31lwU90p6itEZ1rgtSOkYABUTPt/3e7MypQJlqi Z3+Ft4P6xxykRUm5pbie70YRFiJF4tBIVVNT70BZDgIh4e22RH/n6EG3arveKzj5GLNxSxnrqoS KNaU81LM+k22IdaDrzSOnH5XQ5TsawVZ4nWnZkeKWBg== X-Gm-Gg: Acq92OGwf609zYnCQA+ereQJ8dt55oCK5ijNx7o+nnmYofKY8ClyiHboJGZXP4kfScC THFc6ydDu0fUYgSeskzgTxw8IsaZEK/pve7XjYQUx5zILa8id/OWAOil5fg3VqnuA6brJT4IJ55 mxUMNiHlilgP4qgdUlRkI00E3hJ4bhiwz2R+gD9oDzmWK+lwmthTK87RsvJwdvu5YiSgkzWIu9d pqrMW6rDEMmQIqpsDQKUtOixN8znp2Dj6dm0mkfZZen6wzzqSRpnnCHge7NubsDX+XRkz/QM33W QmRM X-Received: by 2002:a05:6820:4d53:10b0:694:93fc:9a0b with SMTP id 006d021491bc7-69b6782bf1emr2290103eaf.27.1778630716071; Tue, 12 May 2026 17:05:16 -0700 (PDT) MIME-Version: 1.0 References: <27BD5D23-19C9-4FD1-8935-9C788C3C9869@gmail.com> <66C1555B-CA54-4ED1-AB4F-0EE97D24A006@gmail.com> <91B35E0F-5DC1-4417-A1B9-FAF4A3DCD2BD@gmail.com> <74C1863C-2C2A-423A-BDE7-0228889F1D80@gmail.com> In-Reply-To: From: Paul A Jungwirth Date: Tue, 12 May 2026 17:05:03 -0700 X-Gm-Features: AVHnY4JRtJvmDqPj7-LHXnMRIhNETLRXGPFrKexJmDwEZtutbns45HDr_xQmfW0 Message-ID: Subject: Re: FOR PORTION OF does not recompute GENERATED STORED columns that depend on the range column To: Nathan Bossart Cc: jian he , Chao Li , Peter Eisentraut , SATYANARAYANA NARLAPURAM , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000004cb9f0651a7bccf" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000004cb9f0651a7bccf Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, May 12, 2026 at 1:34=E2=80=AFPM Nathan Bossart wrote: > > FOR PORTION OF doesn't seem to work well with virtual generated columns, > either. The following example seg-faults on my machine: > > create table t (a int, b int4range generated always as (int4range(a, = a + 1)) virtual); > insert into t values (1); > delete from t for portion of b from 1 to 2; Thanks for catching this! Here is a patch forbidding both STORED and VIRTUAL columns here. There is a follow-up patch (not for v19) to add SQL:2011 PERIODs, which will be based on STORED columns, so we will eventually allow those (if they belong to a PERIOD), but it seems right to forbid them for now. I put the check in the analysis phase to match what we have already, but based on [1] that is apparently premature. I think I'd like to move all those things together in a single commit though. I did experiment with putting just this check in ExecInitModifyTable. But (1) the planner will already reject the UPDATE case with a different error message, and (2) it doesn't really improve anything, since rangeVar gets looked up during analysis anyway (until we address the rest of [1]). [1] https://www.postgresql.org/message-id/626986.1776785090%40sss.pgh.pa.us Yours, -- Paul ~{:-) pj@illuminatedcomputing.com --00000000000004cb9f0651a7bccf Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-Forbid-GENERATED-columns-in-FOR-PORTION-OF.patch" Content-Disposition: attachment; filename="v1-0001-Forbid-GENERATED-columns-in-FOR-PORTION-OF.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mp3arra80 RnJvbSBmMmJiY2FmYzhmZTdkMWRiZGYzYzZmZDQ5YTM0OTc1ZmNhOWQ4MDRkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiUGF1bCBBLiBKdW5nd2lydGgiIDxwakBpbGx1bWluYXRlZGNv bXB1dGluZy5jb20+CkRhdGU6IFR1ZSwgMTIgTWF5IDIwMjYgMTY6MzM6NDIgLTA3MDAKU3ViamVj dDogW1BBVENIIHYxXSBGb3JiaWQgR0VORVJBVEVEIGNvbHVtbnMgaW4gRk9SIFBPUlRJT04gT0YK CldpdGggVklSVFVBTCBjb2x1bW5zIHRoZXJlIGlzIG5vIGNvbHVtbiB0byBhc3NpZ24gdG8sIGFu ZCB3ZSBzaG91bGRuJ3QKYXNzaWduIGRpcmVjdGx5IHRvIFNUT1JFRCBjb2x1bW5zIGVpdGhlci4g KE9uY2Ugd2UgaGF2ZSBQRVJJT0RzLCB3ZSB3aWxsCmFsbG93IGEgU1RPUkVEIGNvbHVtbiBoZXJl LCBidXQgd2Ugd2lsbCBhc3NpZ24gdG8gaXRzIHN0YXJ0L2VuZCBpbnB1dHMuKQoKRGlzY3Vzc2lv bjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9hZ09PeWtmMkhWMjZ5VmZVJTQwbmF0aGFuCi0tLQogc3Jj L2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYyAgICAgICAgICAgICAgICAgfCAxMyArKysrKysrKysK IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yX3BvcnRpb25fb2Yub3V0IHwgMzAgKysrKysr KysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zvcl9wb3J0aW9uX29mLnNxbCAg ICAgIHwgMjEgKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNjQgaW5zZXJ0aW9ucygr KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMgYi9zcmMvYmFja2Vu ZC9wYXJzZXIvYW5hbHl6ZS5jCmluZGV4IGZmY2YyNWE2YmU3Li4xMmI2NGIwMWUxOCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYworKysgYi9zcmMvYmFja2VuZC9wYXJz ZXIvYW5hbHl6ZS5jCkBAIC0xMzU0LDYgKzEzNTQsMTkgQEAgdHJhbnNmb3JtRm9yUG9ydGlvbk9m Q2xhdXNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0 ZSwgZm9yUG9ydGlvbk9mLT5sb2NhdGlvbikpKTsKIAlhdHRyID0gVHVwbGVEZXNjQXR0cih0YXJn ZXRyZWwtPnJkX2F0dCwgcmFuZ2VfYXR0bm8gLSAxKTsKIAorCS8qCisJICogUmVqZWN0IGdlbmVy YXRlZCBjb2x1bW5zLiBXZSBjYW4ndCB3cml0ZSB0byBhIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVt biwKKwkgKiBhbmQgYSBzdG9yZWQgZ2VuZXJhdGVkIGNvbHVtbiBzaG91bGQgYmUgd3JpdHRlbiBi eSBpdHMgb3duIGV4cHJlc3Npb24uCisJICogWFhYOiBXZSBwbGFuIHRvIGltcGxlbWVudCBQRVJJ T0RzIGFzIHN0b3JlZCBnZW5lcmF0ZWQgY29sdW1ucywgc28gbGF0ZXIKKwkgKiB3ZSB3aWxsIGxv b3NlbiB0aGlzIHJlc3RyaWN0aW9uIGlmIHRoZSBjb2x1bW4gYmVsb25ncyB0byBhIFBFUklPRC4K KwkgKi8KKwlpZiAoYXR0ci0+YXR0Z2VuZXJhdGVkKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJjYW5u b3QgdXNlIGdlbmVyYXRlZCBjb2x1bW4gXCIlc1wiIGluIEZPUiBQT1JUSU9OIE9GIiwKKwkJCQkJ CWZvclBvcnRpb25PZi0+cmFuZ2VfbmFtZSksCisJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3Rh dGUsIGZvclBvcnRpb25PZi0+bG9jYXRpb24pKSk7CisKIAlhdHRiYXNldHlwZSA9IGdldEJhc2VU eXBlKGF0dHItPmF0dHR5cGlkKTsKIAogCXJhbmdlVmFyID0gbWFrZVZhcihydGluZGV4LApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JfcG9ydGlvbl9vZi5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zvcl9wb3J0aW9uX29mLm91dAppbmRleCAwYzBhMjA1 YzQ0Yi4uOTk3OWQ4MTY5NzIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Zm9yX3BvcnRpb25fb2Yub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yX3Bv cnRpb25fb2Yub3V0CkBAIC0yMTUyLDQgKzIxNTIsMzQgQEAgU0VMRUNUICogRlJPTSBmcG9fcnVs ZSBPUkRFUiBCWSBmMTsKICgyIHJvd3MpCiAKIERST1AgVEFCTEUgZnBvX3J1bGU7CistLSBVUERB VEUvREVMRVRFIEZPUiBQT1JUSU9OIE9GIG9uIGEgR0VORVJBVEVEIFZJUlRVQUwgcmFuZ2UgY29s dW1uOgorQ1JFQVRFIFRBQkxFIGZwb19nZW5fdmlydHVhbCAoCisgIGEgaW50LAorICBiIGludDRy YW5nZSBHRU5FUkFURUQgQUxXQVlTIEFTIChpbnQ0cmFuZ2UoYSwgYSArIDEpKSBWSVJUVUFMCisp OworSU5TRVJUIElOVE8gZnBvX2dlbl92aXJ0dWFsIFZBTFVFUyAoMSk7CitERUxFVEUgRlJPTSBm cG9fZ2VuX3ZpcnR1YWwgRk9SIFBPUlRJT04gT0YgYiBGUk9NIDEgVE8gMjsgLS0gZmFpbHMKK0VS Uk9SOiAgY2Fubm90IHVzZSBnZW5lcmF0ZWQgY29sdW1uICJiIiBpbiBGT1IgUE9SVElPTiBPRgor TElORSAxOiBERUxFVEUgRlJPTSBmcG9fZ2VuX3ZpcnR1YWwgRk9SIFBPUlRJT04gT0YgYiBGUk9N IDEgVE8gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF4KK1VQREFURSBmcG9fZ2VuX3ZpcnR1YWwgRk9SIFBPUlRJT04gT0YgYiBGUk9NIDEgVE8g MiBTRVQgYSA9IDU7IC0tIGZhaWxzCitFUlJPUjogIGNhbm5vdCB1c2UgZ2VuZXJhdGVkIGNvbHVt biAiYiIgaW4gRk9SIFBPUlRJT04gT0YKK0xJTkUgMTogVVBEQVRFIGZwb19nZW5fdmlydHVhbCBG T1IgUE9SVElPTiBPRiBiIEZST00gMSBUTyAyIFNFVCBhID0gLi4uCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorRFJPUCBUQUJMRSBmcG9fZ2VuX3ZpcnR1 YWw7CistLSBVUERBVEUvREVMRVRFIEZPUiBQT1JUSU9OIE9GIG9uIGEgR0VORVJBVEVEIFNUT1JF RCByYW5nZSBjb2x1bW46CitDUkVBVEUgVEFCTEUgZnBvX2dlbl9zdG9yZWQgKAorICBhIGludCwK KyAgYiBpbnQ0cmFuZ2UgR0VORVJBVEVEIEFMV0FZUyBBUyAoaW50NHJhbmdlKGEsIGEgKyAxKSkg U1RPUkVECispOworSU5TRVJUIElOVE8gZnBvX2dlbl9zdG9yZWQgVkFMVUVTICgxKTsKK0RFTEVU RSBGUk9NIGZwb19nZW5fc3RvcmVkIEZPUiBQT1JUSU9OIE9GIGIgRlJPTSAxIFRPIDI7IC0tIGZh aWxzCitFUlJPUjogIGNhbm5vdCB1c2UgZ2VuZXJhdGVkIGNvbHVtbiAiYiIgaW4gRk9SIFBPUlRJ T04gT0YKK0xJTkUgMTogREVMRVRFIEZST00gZnBvX2dlbl9zdG9yZWQgRk9SIFBPUlRJT04gT0Yg YiBGUk9NIDEgVE8gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXgorVVBEQVRFIGZwb19nZW5fc3RvcmVkIEZPUiBQT1JUSU9OIE9GIGIgRlJPTSAx IFRPIDIgU0VUIGEgPSA1OyAtLSBmYWlscworRVJST1I6ICBjYW5ub3QgdXNlIGdlbmVyYXRlZCBj b2x1bW4gImIiIGluIEZPUiBQT1JUSU9OIE9GCitMSU5FIDE6IFVQREFURSBmcG9fZ2VuX3N0b3Jl ZCBGT1IgUE9SVElPTiBPRiBiIEZST00gMSBUTyAyIFNFVCBhID0gNS4uLgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorRFJPUCBUQUJMRSBmcG9fZ2VuX3N0 b3JlZDsKIFJFU0VUIGRhdGVzdHlsZTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2Zvcl9wb3J0aW9uX29mLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zvcl9wb3J0aW9uX29m LnNxbAppbmRleCBmZDc5YTliNzhlNy4uODFiZGViOGQxM2EgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2Zvcl9wb3J0aW9uX29mLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9mb3JfcG9ydGlvbl9vZi5zcWwKQEAgLTEzOTgsNCArMTM5OCwyNSBAQCBTRUxFQ1QgKiBGUk9N IGZwb19ydWxlIE9SREVSIEJZIGYxOwogCiBEUk9QIFRBQkxFIGZwb19ydWxlOwogCistLSBVUERB VEUvREVMRVRFIEZPUiBQT1JUSU9OIE9GIG9uIGEgR0VORVJBVEVEIFZJUlRVQUwgcmFuZ2UgY29s dW1uOgorQ1JFQVRFIFRBQkxFIGZwb19nZW5fdmlydHVhbCAoCisgIGEgaW50LAorICBiIGludDRy YW5nZSBHRU5FUkFURUQgQUxXQVlTIEFTIChpbnQ0cmFuZ2UoYSwgYSArIDEpKSBWSVJUVUFMCisp OworSU5TRVJUIElOVE8gZnBvX2dlbl92aXJ0dWFsIFZBTFVFUyAoMSk7CitERUxFVEUgRlJPTSBm cG9fZ2VuX3ZpcnR1YWwgRk9SIFBPUlRJT04gT0YgYiBGUk9NIDEgVE8gMjsgLS0gZmFpbHMKK1VQ REFURSBmcG9fZ2VuX3ZpcnR1YWwgRk9SIFBPUlRJT04gT0YgYiBGUk9NIDEgVE8gMiBTRVQgYSA9 IDU7IC0tIGZhaWxzCitEUk9QIFRBQkxFIGZwb19nZW5fdmlydHVhbDsKKworLS0gVVBEQVRFL0RF TEVURSBGT1IgUE9SVElPTiBPRiBvbiBhIEdFTkVSQVRFRCBTVE9SRUQgcmFuZ2UgY29sdW1uOgor Q1JFQVRFIFRBQkxFIGZwb19nZW5fc3RvcmVkICgKKyAgYSBpbnQsCisgIGIgaW50NHJhbmdlIEdF TkVSQVRFRCBBTFdBWVMgQVMgKGludDRyYW5nZShhLCBhICsgMSkpIFNUT1JFRAorKTsKK0lOU0VS VCBJTlRPIGZwb19nZW5fc3RvcmVkIFZBTFVFUyAoMSk7CitERUxFVEUgRlJPTSBmcG9fZ2VuX3N0 b3JlZCBGT1IgUE9SVElPTiBPRiBiIEZST00gMSBUTyAyOyAtLSBmYWlscworVVBEQVRFIGZwb19n ZW5fc3RvcmVkIEZPUiBQT1JUSU9OIE9GIGIgRlJPTSAxIFRPIDIgU0VUIGEgPSA1OyAtLSBmYWls cworRFJPUCBUQUJMRSBmcG9fZ2VuX3N0b3JlZDsKKworCiBSRVNFVCBkYXRlc3R5bGU7Ci0tIAoy LjQ3LjMKCg== --00000000000004cb9f0651a7bccf--