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 1vyxYh-000ZhH-2S for pgsql-hackers@arkaria.postgresql.org; Sat, 07 Mar 2026 19:43:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vyxYe-009Me1-2V for pgsql-hackers@arkaria.postgresql.org; Sat, 07 Mar 2026 19:43:29 +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 1vyxYe-009Mdt-0e for pgsql-hackers@lists.postgresql.org; Sat, 07 Mar 2026 19:43:29 +0000 Received: from mail-yw1-x112c.google.com ([2607:f8b0:4864:20::112c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vyxYc-000000012Rj-1ZJd for pgsql-hackers@postgresql.org; Sat, 07 Mar 2026 19:43:27 +0000 Received: by mail-yw1-x112c.google.com with SMTP id 00721157ae682-798527f822cso103262887b3.3 for ; Sat, 07 Mar 2026 11:43:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772912605; cv=none; d=google.com; s=arc-20240605; b=SrTPouVgSkBw57ynKV1JzIs0gRL/p+0Hx0/LNenh2/5lnCgQB2/z/wkUHBhZ5Ue9+0 Xx2EOCRH3+/ndFtIX+heCdvjQ2Wa1s/aNz3UL5HOoet2Pc6Qy1L8keS5HJqosqh2d2NM hBnwM5BUfRa/McemlOyyF7xu8ASTe//usrvHeF1IrOt9Olbn2rxldeNviJ2U51YJvYQ4 ROhQuhKVfC2Zc0i86eHJZmPZJEeDy6eLmPcj/C6qBX2HSz8KM5XELaiGxnbA88J/JRcl tq8Ixx1wRWllVO8y6qdasDh7g4dLzneEpmnstXfEZ3lRIyJKX5bo1RVpJ5/5B8CV7GGB tCYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=RO907SGoDZC5I4MpjPArusPEVBHVsBQ2CJ440bMLER0=; fh=33OU7BWuulPFH378PdKTnpeW+jw3IP20DTmpLDeQ3pE=; b=SE2+frs32eO+KLbJfWOWtROFaFNC/5ajaBtDnFLEwF8IUHJruzqpxwglqgMOHEkw2K qAI/NqC1zk0fDZW0urIhW88dFYS3IBsVv3NyEubzOR9PpAK3ehHZiNnI4Hwue87osu7V XHtgzP4hC9RNBfnbYYR8H0aQGWvdm3jx/bAUc/ASI/JA57mS4EL6mm/qFqjyYTUI3Ham ukBvMWH/d8Q6+7ANZsoKMa1UH7GUOMeuxB2rBvSsJA4uofAnOJBZylqiDaQmMDpv+0Jf fUwKFWbsoVoXo/OTaddX23XzvjGnBe5o/OXwWae0CRr40UXIfTJvAzkzjLOivbggG56P 4p9Q==; darn=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=20230601; t=1772912605; x=1773517405; darn=postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=RO907SGoDZC5I4MpjPArusPEVBHVsBQ2CJ440bMLER0=; b=GOjzrPnbUImXAaiNwH9Ja1eFADxbjZSro25YcJr3mQIC6ARY6GXV5io8ERv0FEPC/V 5mzPE7i7pauW38AbZquliq+gGsI7Pp7SMZ27arEDIqdxfhrsdH31FLI7B5rrLGjulOu3 arZGjAC2hOBEnYntG7zuM1oxc3k9XlfSMpKIR647At8tXIw50GciWYciwUD8eRNmpfGY UU1n7BWgao5qV8m8Ob8xXHAjOy44GmZX/uXpS3KndCwNxCEcdN55GAHeZP64S8qwhjtl h+8V0LuuW+ermbBNkHPpE96lWTo9LVlD22266Tt6LhRd8bVSuR3Cruyl9BEGMpEmFPBM 9ZkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772912605; x=1773517405; h=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=RO907SGoDZC5I4MpjPArusPEVBHVsBQ2CJ440bMLER0=; b=K2Qo1Z3gOjcy84GujyxT1p6v3s4y6+I82+5MH6VfG/pefv2NMHMkMYvdLR6c4B1oSC sysaqzgciApL7LyftB3s7rHkObuFAB70YdVDSgStrdRPuYVszDAV/nxtCZKJLItog0EO 0SgJ4Z+hDJpJSkwJUAdbEMkhVAMGIndOOyxgccoS9QRn9D2oHVCbC7wLADx/N88cD6ff PfTB78iRPwYlAtoHpr4XVnzerPYhC8fpWimwcTG3IQ28nnNOatWXPDv2ehMXAAjXleTn 2AofUVA969V//82cfiwLhuy23EbptKzvcLdq5VLkwUZPJwqZbzY/8iU6vATgW1iyyq65 5q7g== X-Gm-Message-State: AOJu0Yw+UupyOzC2dQYScCZncCinw9jjwCpqc7q4SlB2vv0QBBOp415G Ko1OMlkM6bXdcdQs8Ug/QeFy34/Vl/1Nl372HeSJHT69BAkYPo5AfdlVbSpIjH4f/cQZDac/lfg JpcXiXkGHZUC+6M5spf+zYnRmuTJPh3J0bKnL X-Gm-Gg: ATEYQzxMxi8nbDS18KzsyoPKtceKHIfQkItwdWpPTjrWKzDi5DZUyVM5g4wQa8CWrv3 hX/aROAmVZK3LjlMJRiEh6FkNxsv3YjOU067ycX/SJJeXq1+1IAyqYmWnCISCLhcoa+Qfs2z7Qe Vl4KqMlAoE7EyhgAIzgeHxCG31J3HdMGo5wFt7ncCK3+H8t2P06CtdciVPDocdHgahMkTQCtY0F ARD8FVvKKwdOdGPReR7h8elEBO60dyEMvt5uEGTOdzb1womL2pLdWcOeehH3akYluzeHIiHBwed vw7nRw== X-Received: by 2002:a05:690c:110:b0:798:f0e8:12e4 with SMTP id 00721157ae682-798f0e81758mr6224867b3.31.1772912605403; Sat, 07 Mar 2026 11:43:25 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Ayush Tiwari Date: Sun, 8 Mar 2026 01:13:13 +0530 X-Gm-Features: AaiRm52EXhSJcIj6KT2vhbz-4723pwD9-qobPDjqZg1oQ4aHCxV-rh-jiUISyck Message-ID: Subject: Re: tid_blockno() and tid_offset() accessor functions To: pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="000000000000109d2c064c7462b5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000109d2c064c7462b5 Content-Type: multipart/alternative; boundary="000000000000109d2b064c7462b3" --000000000000109d2b064c7462b3 Content-Type: text/plain; charset="UTF-8" Hello, Attaching a V2-patch post rebasing due to oid conflict with the latest main branch. In addition to that changing the sql function name for tid block number to tid_block and adding document related changes. Please review and let me know your thoughts. Regards, Ayush On Sat, 28 Feb 2026 at 00:29, Ayush Tiwari wrote: > Hi hackers, > > As of now we don't have any built-in way to extract the block and offset > components from a TID. When people need to group by page (like for bloat > analysis) or filter by specific blocks, they usually end up using the > `ctid::text::point` hack: > > SELECT (ctid::text::point)[0]::bigint AS blockno, > (ctid::text::point)[1]::int AS offset > FROM my_table; > > This works, but it's pretty clunky, relies on the text representation, and > isn't great if you're trying to parse TIDs outside of SQL. > > The attached patch adds two simple accessor functions: > - `tid_blockno(tid) -> bigint` > - `tid_offset(tid) -> integer` > > A couple of quick notes on the implementation I went for: > - `tid_blockno` returns `int8` since `BlockNumber` is `uint32` and could > overflow `int4`. > - `tid_offset` returns `int4` since `OffsetNumber` is `uint16`. > - Both are marked leakproof and strict. > - I used the `NoCheck` macros from `itemptr.h` so they safely handle > user-supplied literals like `(0,0)`. > > Please let me know what you think! > > Regards, > Ayush > --000000000000109d2b064c7462b3 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello,

Attaching a V2-patch post rebasing due to oi= d conflict with the latest main branch. In addition to that changing the sq= l function name for tid block number to tid_block and adding document relat= ed changes.

Please=C2=A0review and let me know your thoughts.
Regards,
Ayush

On Sat, 28 Feb 2026 at 00:29, Ayush= Tiwari <ayushtiwari.slg0= 1@gmail.com> wrote:
Hi hackers,

As of now we don't have = any built-in way to extract the block and offset components from a TID. Whe= n people need to group by page (like for bloat analysis) or filter by speci= fic blocks, they usually end up using the `ctid::text::point` hack:

= =C2=A0 =C2=A0 SELECT (ctid::text::point)[0]::bigint AS blockno,
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ctid::text::point)[1]::int =C2=A0 =C2=A0= AS offset
=C2=A0 =C2=A0 FROM my_table;

This works, but it's p= retty clunky, relies on the text representation, and isn't great if you= 're trying to parse TIDs outside of SQL.

The attached patch adds= two simple accessor functions:
- `tid_blockno(tid) -> bigint`
- `= tid_offset(tid) -> integer`

A couple of quick notes on the implem= entation I went for:
- `tid_blockno` returns `int8` since `BlockNumber` = is `uint32` and could overflow `int4`.
- `tid_offset` returns `int4` sin= ce `OffsetNumber` is `uint16`.
- Both are marked leakproof and strict.- I used the `NoCheck` macros from `itemptr.h` so they safely handle user= -supplied literals like `(0,0)`.

Please let me know what you think!<= br>
Regards,
Ayush
--000000000000109d2b064c7462b3-- --000000000000109d2c064c7462b5 Content-Type: application/octet-stream; name="v2-0001-Add-tid_block-and-tid_offset-accessor-functions.patch" Content-Disposition: attachment; filename="v2-0001-Add-tid_block-and-tid_offset-accessor-functions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmgq1qnk0 RnJvbSA5MmUzNjU3ZDg1YjEzMzU1NTYzYmE0YzQ0N2RkZjg5ZmNiNGM0YjNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBeXVzaCBUaXdhcmkgPGF5dXNodGl3YXJpLnNsZzAxQGdtYWls LmNvbT4KRGF0ZTogU2F0LCA3IE1hciAyMDI2IDE4OjI3OjM2ICswMDAwClN1YmplY3Q6IFtQQVRD SCB2Ml0gQWRkIHRpZF9ibG9jaygpIGFuZCB0aWRfb2Zmc2V0KCkgYWNjZXNzb3IgZnVuY3Rpb25z CgpBZGQgdHdvIG5ldyBidWlsdC1pbiBTUUwgZnVuY3Rpb25zIHRvIGV4dHJhY3QgdGhlIGNvbXBv bmVudHMgb2YgYSB0aWQKKHR1cGxlIGlkZW50aWZpZXIpIHZhbHVlOgoKICB0aWRfYmxvY2sodGlk KSAtPiBiaWdpbnQgICAtLSBleHRyYWN0IGJsb2NrIG51bWJlcgogIHRpZF9vZmZzZXQodGlkKSAg LT4gaW50ZWdlciAgLS0gZXh0cmFjdCBvZmZzZXQgbnVtYmVyCgpUaGVzZSBwcm92aWRlIGEgY2xl YW4sIGVmZmljaWVudCBhbHRlcm5hdGl2ZSB0byB0aGUgY29tbW9uIHdvcmthcm91bmQKb2YgY3Rp ZDo6dGV4dDo6cG9pbnQgZm9yIGRlY29tcG9zaW5nIFRJRCB2YWx1ZXMuIFRoZSB0ZXh0LWJhc2Vk IGhhY2sKaXMgZnJhZ2lsZSwgaW5lZmZpY2llbnQsIGFuZCB1bmF2YWlsYWJsZSBvdXRzaWRlIG9m IFNRTCBjb250ZXh0cy4KCnRpZF9ibG9jaygpIHJldHVybnMgaW50OCAoYmlnaW50KSBiZWNhdXNl IEJsb2NrTnVtYmVyIGlzIHVpbnQzMiwKd2hpY2ggZXhjZWVkcyB0aGUgcmFuZ2Ugb2YgaW50NC4g dGlkX29mZnNldCgpIHJldHVybnMgaW50NCAoaW50ZWdlcikKYmVjYXVzZSBPZmZzZXROdW1iZXIg aXMgdWludDE2LCB3aGljaCBmaXRzIHNhZmVseSBpbiBpbnQ0LgoKQm90aCBmdW5jdGlvbnMgdXNl IHRoZSBOb0NoZWNrIGFjY2Vzc29yIHZhcmlhbnRzIGZyb20gaXRlbXB0ci5oLAphcmUgbWFya2Vk IGxlYWtwcm9vZiwgYW5kIGluY2x1ZGUgcmVncmVzc2lvbiB0ZXN0cyBjb3ZlcmluZyB0eXBpY2Fs CnZhbHVlcywgYm91bmRhcnkgY29uZGl0aW9ucywgTlVMTCBoYW5kbGluZywgYW5kIHJvdW5kLXRy aXAgaWRlbnRpdHkuCi0tLQogZG9jL3NyYy9zZ21sL2Z1bmMvYWxsZmlsZXMuc2dtbCAgICAgICAg ICB8ICAxICsKIGRvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtdGlkLnNnbWwgICAgICAgICAgfCA3MyAr KysrKysrKysrKysrKysrKysrKysrKysKIGRvYy9zcmMvc2dtbC9mdW5jL2Z1bmMuc2dtbCAgICAg ICAgICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvdGlkLmMgICAgICAgICAgICAg IHwgMzEgKysrKysrKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAg ICB8ICA2ICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHkub3V0IHwgIDIg Kwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90aWQub3V0ICAgICAgICB8IDY2ICsrKysrKysr KysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvdGlkLnNxbCAgICAgICAgICAgICB8 IDIxICsrKysrKysKIDggZmlsZXMgY2hhbmdlZCwgMjAxIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLXRpZC5zZ21sCgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL2Z1bmMvYWxsZmlsZXMuc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jL2FsbGZp bGVzLnNnbWwKaW5kZXggY2UxMWVmMWQ1ZDguLmY1ZTNmMDA4NTM3IDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvZnVuYy9hbGxmaWxlcy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2FsbGZp bGVzLnNnbWwKQEAgLTE3LDYgKzE3LDcgQEAgQ29tcGxldGUgbGlzdCBvZiB1c2FibGUgc2dtbCBz b3VyY2UgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuCiA8IUVOVElUWSBmdW5jLWZvcm1hdHRpbmcg ICAgICAgICAgICBTWVNURU0gImZ1bmMtZm9ybWF0dGluZy5zZ21sIj4KIDwhRU5USVRZIGZ1bmMt ZGF0ZXRpbWUgICAgICAgICAgICAgIFNZU1RFTSAiZnVuYy1kYXRldGltZS5zZ21sIj4KIDwhRU5U SVRZIGZ1bmMtZW51bSAgICAgICAgICAgICAgICAgIFNZU1RFTSAiZnVuYy1lbnVtLnNnbWwiPgor PCFFTlRJVFkgZnVuYy10aWQgICAgICAgICAgICAgICAgICAgU1lTVEVNICJmdW5jLXRpZC5zZ21s Ij4KIDwhRU5USVRZIGZ1bmMtZ2VvbWV0cnkgICAgICAgICAgICAgIFNZU1RFTSAiZnVuYy1nZW9t ZXRyeS5zZ21sIj4KIDwhRU5USVRZIGZ1bmMtbmV0ICAgICAgICAgICAgICAgICAgIFNZU1RFTSAi ZnVuYy1uZXQuc2dtbCI+CiA8IUVOVElUWSBmdW5jLXRleHRzZWFyY2ggICAgICAgICAgICBTWVNU RU0gImZ1bmMtdGV4dHNlYXJjaC5zZ21sIj4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5j L2Z1bmMtdGlkLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLXRpZC5zZ21sCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42YjNkZTE0ZDA5MwotLS0gL2Rldi9udWxs CisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtdGlkLnNnbWwKQEAgLTAsMCArMSw3MyBAQAor IDxzZWN0MSBpZD0iZnVuY3Rpb25zLXRpZCI+CisgIDx0aXRsZT5USUQgRnVuY3Rpb25zPC90aXRs ZT4KKworICA8aW5kZXh0ZXJtIHpvbmU9ImZ1bmN0aW9ucy10aWQiPgorICAgPHByaW1hcnk+VElE PC9wcmltYXJ5PgorICAgPHNlY29uZGFyeT5mdW5jdGlvbnM8L3NlY29uZGFyeT4KKyAgPC9pbmRl eHRlcm0+CisKKyAgPGluZGV4dGVybT4KKyAgIDxwcmltYXJ5PnRpZF9ibG9jazwvcHJpbWFyeT4K KyAgPC9pbmRleHRlcm0+CisKKyAgPGluZGV4dGVybT4KKyAgIDxwcmltYXJ5PnRpZF9vZmZzZXQ8 L3ByaW1hcnk+CisgIDwvaW5kZXh0ZXJtPgorCisgIDxwYXJhPgorICAgRm9yIHRoZSA8dHlwZT50 aWQ8L3R5cGU+IGRhdGEgdHlwZSAoZGVzY3JpYmVkIGluIDx4cmVmCisgICBsaW5rZW5kPSJkYXRh dHlwZS1vaWQiLz4pLCA8eHJlZiBsaW5rZW5kPSJmdW5jdGlvbnMtdGlkLXRhYmxlIi8+CisgICBz aG93cyB0aGUgZnVuY3Rpb25zIGF2YWlsYWJsZSBmb3IgZXh0cmFjdGluZyB0aGUgYmxvY2sgbnVt YmVyIGFuZAorICAgdHVwbGUgb2Zmc2V0LiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBjb21tb25seSB1 c2VkIHdpdGggdGhlCisgICA8c3RydWN0ZmllbGQ+Y3RpZDwvc3RydWN0ZmllbGQ+IHN5c3RlbSBj b2x1bW4uCisgIDwvcGFyYT4KKworICA8dGFibGUgaWQ9ImZ1bmN0aW9ucy10aWQtdGFibGUiPgor ICAgPHRpdGxlPjx0eXBlPlRJRDwvdHlwZT4gRnVuY3Rpb25zPC90aXRsZT4KKyAgIDx0Z3JvdXAg Y29scz0iMSI+CisgICAgPHRoZWFkPgorICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImZ1 bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICBGdW5j dGlvbgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgRGVzY3JpcHRpb24KKyAg ICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIEV4YW1wbGUocykKKyAgICAgIDwvcGFy YT48L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICA8L3RoZWFkPgorCisgICAgPHRib2R5PgorICAg ICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9 ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICA8ZnVuY3Rpb24+dGlkX2Jsb2NrPC9mdW5jdGlvbj4g KCA8dHlwZT50aWQ8L3R5cGU+ICkKKyAgICAgICA8cmV0dXJudmFsdWU+YmlnaW50PC9yZXR1cm52 YWx1ZT4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIEV4dHJhY3RzIHRoZSBi bG9jayBudW1iZXIgZnJvbSBhIHR1cGxlIGlkZW50aWZpZXIuCisgICAgICA8L3BhcmE+CisgICAg ICA8cGFyYT4KKyAgICAgICA8bGl0ZXJhbD50aWRfYmxvY2soJyg0Miw3KSc6OnRpZCk8L2xpdGVy YWw+CisgICAgICAgPHJldHVybnZhbHVlPjQyPC9yZXR1cm52YWx1ZT4KKyAgICAgIDwvcGFyYT48 L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImZ1 bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICA8ZnVu Y3Rpb24+dGlkX29mZnNldDwvZnVuY3Rpb24+ICggPHR5cGU+dGlkPC90eXBlPiApCisgICAgICAg PHJldHVybnZhbHVlPmludGVnZXI8L3JldHVybnZhbHVlPgorICAgICAgPC9wYXJhPgorICAgICAg PHBhcmE+CisgICAgICAgRXh0cmFjdHMgdGhlIHR1cGxlIG9mZnNldCB3aXRoaW4gdGhlIGJsb2Nr IGZyb20gYSB0dXBsZSBpZGVudGlmaWVyLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+Cisg ICAgICAgPGxpdGVyYWw+dGlkX29mZnNldCgnKDQyLDcpJzo6dGlkKTwvbGl0ZXJhbD4KKyAgICAg ICA8cmV0dXJudmFsdWU+NzwvcmV0dXJudmFsdWU+CisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAg ICAgPC9yb3c+CisgICAgPC90Ym9keT4KKyAgIDwvdGdyb3VwPgorICA8L3RhYmxlPgorIDwvc2Vj dDE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L2Z1bmMvZnVuYy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy5zZ21sCmluZGV4IGYzNTFl ZjUzZjYzLi4zZmQyMTU2OGIyZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMuc2dtbApAQCAtNTksNiArNTksNyBAQCBy ZXBlYXQoJ1BnJywgNCkgPHJldHVybnZhbHVlPlBnUGdQZ1BnPC9yZXR1cm52YWx1ZT4KICZmdW5j LWZvcm1hdHRpbmc7CiAmZnVuYy1kYXRldGltZTsKICZmdW5jLWVudW07CismZnVuYy10aWQ7CiAm ZnVuYy1nZW9tZXRyeTsKICZmdW5jLW5ldDsKICZmdW5jLXRleHRzZWFyY2g7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvdGlkLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdGlk LmMKaW5kZXggMDcyNDhiNjllNTcuLmQxM2M3Y2JlNDE4IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvdGlkLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RpZC5jCkBAIC0y ODAsNiArMjgwLDM3IEBAIGhhc2h0aWRleHRlbmRlZChQR19GVU5DVElPTl9BUkdTKQogfQogCiAK Ky8qCisgKglUSUQgYWNjZXNzb3IgZnVuY3Rpb25zCisgKi8KKworLyoKKyAqIHRpZF9ibG9jayAt IGV4dHJhY3QgdGhlIGJsb2NrIG51bWJlciBmcm9tIGEgVElECisgKgorICogUmV0dXJucyBpbnQ4 IGJlY2F1c2UgQmxvY2tOdW1iZXIgaXMgdWludDMyLCB3aGljaCBleGNlZWRzIHRoZSByYW5nZSBv ZiBpbnQ0LgorICovCitEYXR1bQordGlkX2Jsb2NrKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJSXRl bVBvaW50ZXIgdGlkID0gUEdfR0VUQVJHX0lURU1QT0lOVEVSKDApOworCisJUEdfUkVUVVJOX0lO VDY0KChpbnQ2NCkgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlck5vQ2hlY2sodGlkKSk7Cit9CisK Ky8qCisgKiB0aWRfb2Zmc2V0IC0gZXh0cmFjdCB0aGUgb2Zmc2V0IG51bWJlciBmcm9tIGEgVElE CisgKgorICogUmV0dXJucyBpbnQ0IGJlY2F1c2UgT2Zmc2V0TnVtYmVyIGlzIHVpbnQxNiwgd2hp Y2ggZml0cyBpbiBpbnQ0LgorICovCitEYXR1bQordGlkX29mZnNldChQR19GVU5DVElPTl9BUkdT KQoreworCUl0ZW1Qb2ludGVyIHRpZCA9IFBHX0dFVEFSR19JVEVNUE9JTlRFUigwKTsKKworCVBH X1JFVFVSTl9JTlQzMigoaW50MzIpIEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyTm9DaGVjayh0 aWQpKTsKK30KKworCiAvKgogICoJRnVuY3Rpb25zIHRvIGdldCBsYXRlc3QgdGlkIG9mIGEgc3Bl Y2lmaWVkIHR1cGxlLgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDM2MWUyY2ZmZmVi Li4wODI2N2RkNGY4MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0yNzUwLDYgKzI3NTAs MTIgQEAKIHsgb2lkID0+ICcyNzk2JywgZGVzY3IgPT4gJ3NtYWxsZXIgb2YgdHdvJywKICAgcHJv bmFtZSA9PiAndGlkc21hbGxlcicsIHByb3JldHR5cGUgPT4gJ3RpZCcsIHByb2FyZ3R5cGVzID0+ ICd0aWQgdGlkJywKICAgcHJvc3JjID0+ICd0aWRzbWFsbGVyJyB9LAoreyBvaWQgPT4gJzk5NTEn LCBkZXNjciA9PiAnZXh0cmFjdCBibG9jayBudW1iZXIgZnJvbSB0aWQnLAorICBwcm9uYW1lID0+ ICd0aWRfYmxvY2snLCBwcm9sZWFrcHJvb2YgPT4gJ3QnLCBwcm9yZXR0eXBlID0+ICdpbnQ4JywK KyAgcHJvYXJndHlwZXMgPT4gJ3RpZCcsIHByb3NyYyA9PiAndGlkX2Jsb2NrJyB9LAoreyBvaWQg PT4gJzk5NTInLCBkZXNjciA9PiAnZXh0cmFjdCBvZmZzZXQgbnVtYmVyIGZyb20gdGlkJywKKyAg cHJvbmFtZSA9PiAndGlkX29mZnNldCcsIHByb2xlYWtwcm9vZiA9PiAndCcsIHByb3JldHR5cGUg PT4gJ2ludDQnLAorICBwcm9hcmd0eXBlcyA9PiAndGlkJywgcHJvc3JjID0+ICd0aWRfb2Zmc2V0 JyB9LAogeyBvaWQgPT4gJzIyMzMnLCBkZXNjciA9PiAnaGFzaCcsCiAgIHByb25hbWUgPT4gJ2hh c2h0aWQnLCBwcm9yZXR0eXBlID0+ICdpbnQ0JywgcHJvYXJndHlwZXMgPT4gJ3RpZCcsCiAgIHBy b3NyYyA9PiAnaGFzaHRpZCcgfSwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvb3ByX3Nhbml0eS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHku b3V0CmluZGV4IDZmZjRkN2VlOTAxLi5jZmRjNmIxYTE3YSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9vcHJfc2FuaXR5Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL29wcl9zYW5pdHkub3V0CkBAIC04ODcsNiArODg3LDggQEAgb2lkOGxlKG9pZDgsb2lk OCkKIG9pZDhndChvaWQ4LG9pZDgpCiBvaWQ4Z2Uob2lkOCxvaWQ4KQogYnRvaWQ4Y21wKG9pZDgs b2lkOCkKK3RpZF9ibG9jayh0aWQpCit0aWRfb2Zmc2V0KHRpZCkKIC0tIENoZWNrIHRoYXQgZnVu Y3Rpb25zIHdpdGhvdXQgYXJndW1lbnQgYXJlIG5vdCBtYXJrZWQgYXMgbGVha3Byb29mLgogU0VM RUNUIHAxLm9pZDo6cmVncHJvY2VkdXJlCiBGUk9NIHBnX3Byb2MgcDEgSk9JTiBwZ19uYW1lc3Bh Y2UgcG4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdGlkLm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdGlkLm91dAppbmRleCAwODNjODNhMWUxYi4uMzQ5N2E3 NzY4OGIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdGlkLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RpZC5vdXQKQEAgLTQyLDYgKzQyLDU3IEBAIFNF TEVDVCAqIEZST00gcGdfaW5wdXRfZXJyb3JfaW5mbygnKDAsLTEpJywgJ3RpZCcpOwogIGludmFs aWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIHRpZDogIigwLC0xKSIgfCAgICAgICAgfCAgICAgIHwg MjJQMDIKICgxIHJvdykKIAorLS0gdGVzdHMgZm9yIHRpZF9ibG9jaygpIGFuZCB0aWRfb2Zmc2V0 KCkKK1NFTEVDVCB0aWRfYmxvY2soJygwLDApJzo6dGlkKSwgdGlkX29mZnNldCgnKDAsMCknOjp0 aWQpOworIHRpZF9ibG9jayB8IHRpZF9vZmZzZXQgCistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0K KyAgICAgICAgIDAgfCAgICAgICAgICAwCisoMSByb3cpCisKK1NFTEVDVCB0aWRfYmxvY2soJygw LDEpJzo6dGlkKSwgdGlkX29mZnNldCgnKDAsMSknOjp0aWQpOworIHRpZF9ibG9jayB8IHRpZF9v ZmZzZXQgCistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyAgICAgICAgIDAgfCAgICAgICAgICAx CisoMSByb3cpCisKK1NFTEVDVCB0aWRfYmxvY2soJyg0Miw3KSc6OnRpZCksIHRpZF9vZmZzZXQo Jyg0Miw3KSc6OnRpZCk7CisgdGlkX2Jsb2NrIHwgdGlkX29mZnNldCAKKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLQorICAgICAgICA0MiB8ICAgICAgICAgIDcKKygxIHJvdykKKworLS0gbWF4IHZh bHVlczogYmxvY2tubyB1aW50MzIgbWF4LCBvZmZzZXQgdWludDE2IG1heAorU0VMRUNUIHRpZF9i bG9jaygnKDQyOTQ5NjcyOTUsNjU1MzUpJzo6dGlkKSwgdGlkX29mZnNldCgnKDQyOTQ5NjcyOTUs NjU1MzUpJzo6dGlkKTsKKyB0aWRfYmxvY2sgIHwgdGlkX29mZnNldCAKKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0KKyA0Mjk0OTY3Mjk1IHwgICAgICA2NTUzNQorKDEgcm93KQorCistLSAoLTEs MCkgd3JhcHMgdG8gYmxvY2tubyA0Mjk0OTY3Mjk1CitTRUxFQ1QgdGlkX2Jsb2NrKCcoLTEsMCkn Ojp0aWQpOworIHRpZF9ibG9jayAgCistLS0tLS0tLS0tLS0KKyA0Mjk0OTY3Mjk1CisoMSByb3cp CisKKy0tIE5VTEwgaGFuZGxpbmcgKHN0cmljdCBmdW5jdGlvbnMpCitTRUxFQ1QgdGlkX2Jsb2Nr KE5VTEw6OnRpZCksIHRpZF9vZmZzZXQoTlVMTDo6dGlkKTsKKyB0aWRfYmxvY2sgfCB0aWRfb2Zm c2V0IAorLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgICAgICAgICAgIHwgICAgICAgICAgIAor KDEgcm93KQorCistLSByb3VuZC10cmlwOiBibG9ja25vICsgb2Zmc2V0IHJlY29uc3RydWN0IHRo ZSBvcmlnaW5hbCBUSUQKK1NFTEVDVCB0LCB0aWRfYmxvY2sodCksIHRpZF9vZmZzZXQodCksCisg ICAgICAgZm9ybWF0KCcoJXMsJXMpJywgdGlkX2Jsb2NrKHQpLCB0aWRfb2Zmc2V0KHQpKTo6dGlk ID0gdCBBUyByb3VuZHRyaXBfb2sKK0ZST00gKFZBTFVFUyAoJygwLDApJzo6dGlkKSwgKCcoMSw0 MiknOjp0aWQpLCAoJyg0Mjk0OTY3Mjk1LDY1NTM1KSc6OnRpZCkpIEFTIHYodCk7CisgICAgICAg ICB0ICAgICAgICAgIHwgdGlkX2Jsb2NrICB8IHRpZF9vZmZzZXQgfCByb3VuZHRyaXBfb2sgCist LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tCisgKDAsMCkgICAgICAgICAgICAgIHwgICAgICAgICAgMCB8ICAgICAgICAgIDAgfCB0Cisg KDEsNDIpICAgICAgICAgICAgIHwgICAgICAgICAgMSB8ICAgICAgICAgNDIgfCB0CisgKDQyOTQ5 NjcyOTUsNjU1MzUpIHwgNDI5NDk2NzI5NSB8ICAgICAgNjU1MzUgfCB0CisoMyByb3dzKQorCiAt LSB0ZXN0cyBmb3IgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gVElEIGhhbmRsaW5nCiBDUkVBVEUgVEFC TEUgdGlkX3RhYiAoYSBpbnQpOwogLS0gbWluKCkgYW5kIG1heCgpIGZvciBUSURzCkBAIC01OCw2 ICsxMDksMjEgQEAgU0VMRUNUIG1heChjdGlkKSBGUk9NIHRpZF90YWI7CiAgKDAsMikKICgxIHJv dykKIAorLS0gdGlkX2Jsb2NrKCkgYW5kIHRpZF9vZmZzZXQoKSB3aXRoIHJlYWwgdGFibGUgY3Rp ZAorU0VMRUNUIGN0aWQsIHRpZF9ibG9jayhjdGlkKSwgdGlkX29mZnNldChjdGlkKSBGUk9NIHRp ZF90YWI7CisgY3RpZCAgfCB0aWRfYmxvY2sgfCB0aWRfb2Zmc2V0IAorLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0KKyAoMCwxKSB8ICAgICAgICAgMCB8ICAgICAgICAgIDEKKyAoMCwy KSB8ICAgICAgICAgMCB8ICAgICAgICAgIDIKKygyIHJvd3MpCisKKy0tIHVzZSBpbiBXSEVSRSBj bGF1c2UKK1NFTEVDVCBjdGlkIEZST00gdGlkX3RhYiBXSEVSRSB0aWRfYmxvY2soY3RpZCkgPSAw IEFORCB0aWRfb2Zmc2V0KGN0aWQpID0gMTsKKyBjdGlkICAKKy0tLS0tLS0KKyAoMCwxKQorKDEg cm93KQorCiBUUlVOQ0FURSB0aWRfdGFiOwogLS0gVGVzdHMgZm9yIGN1cnJ0aWQyKCkgd2l0aCB2 YXJpb3VzIHJlbGF0aW9uIGtpbmRzCiAtLSBNYXRlcmlhbGl6ZWQgdmlldwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvdGlkLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RpZC5z cWwKaW5kZXggMjYwMmUyMGViNWEuLmMwYTcwYmU1Y2JkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC90aWQuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RpZC5zcWwKQEAg LTE2LDYgKzE2LDIyIEBAIFNFTEVDVCBwZ19pbnB1dF9pc192YWxpZCgnKDAsLTEpJywgJ3RpZCcp OwogU0VMRUNUICogRlJPTSBwZ19pbnB1dF9lcnJvcl9pbmZvKCcoMCwtMSknLCAndGlkJyk7CiAK IAorLS0gdGVzdHMgZm9yIHRpZF9ibG9jaygpIGFuZCB0aWRfb2Zmc2V0KCkKK1NFTEVDVCB0aWRf YmxvY2soJygwLDApJzo6dGlkKSwgdGlkX29mZnNldCgnKDAsMCknOjp0aWQpOworU0VMRUNUIHRp ZF9ibG9jaygnKDAsMSknOjp0aWQpLCB0aWRfb2Zmc2V0KCcoMCwxKSc6OnRpZCk7CitTRUxFQ1Qg dGlkX2Jsb2NrKCcoNDIsNyknOjp0aWQpLCB0aWRfb2Zmc2V0KCcoNDIsNyknOjp0aWQpOworLS0g bWF4IHZhbHVlczogYmxvY2tubyB1aW50MzIgbWF4LCBvZmZzZXQgdWludDE2IG1heAorU0VMRUNU IHRpZF9ibG9jaygnKDQyOTQ5NjcyOTUsNjU1MzUpJzo6dGlkKSwgdGlkX29mZnNldCgnKDQyOTQ5 NjcyOTUsNjU1MzUpJzo6dGlkKTsKKy0tICgtMSwwKSB3cmFwcyB0byBibG9ja25vIDQyOTQ5Njcy OTUKK1NFTEVDVCB0aWRfYmxvY2soJygtMSwwKSc6OnRpZCk7CistLSBOVUxMIGhhbmRsaW5nIChz dHJpY3QgZnVuY3Rpb25zKQorU0VMRUNUIHRpZF9ibG9jayhOVUxMOjp0aWQpLCB0aWRfb2Zmc2V0 KE5VTEw6OnRpZCk7CistLSByb3VuZC10cmlwOiBibG9ja25vICsgb2Zmc2V0IHJlY29uc3RydWN0 IHRoZSBvcmlnaW5hbCBUSUQKK1NFTEVDVCB0LCB0aWRfYmxvY2sodCksIHRpZF9vZmZzZXQodCks CisgICAgICAgZm9ybWF0KCcoJXMsJXMpJywgdGlkX2Jsb2NrKHQpLCB0aWRfb2Zmc2V0KHQpKTo6 dGlkID0gdCBBUyByb3VuZHRyaXBfb2sKK0ZST00gKFZBTFVFUyAoJygwLDApJzo6dGlkKSwgKCco MSw0MiknOjp0aWQpLCAoJyg0Mjk0OTY3Mjk1LDY1NTM1KSc6OnRpZCkpIEFTIHYodCk7CisKKwog LS0gdGVzdHMgZm9yIGZ1bmN0aW9ucyByZWxhdGVkIHRvIFRJRCBoYW5kbGluZwogCiBDUkVBVEUg VEFCTEUgdGlkX3RhYiAoYSBpbnQpOwpAQCAtMjQsNiArNDAsMTEgQEAgQ1JFQVRFIFRBQkxFIHRp ZF90YWIgKGEgaW50KTsKIElOU0VSVCBJTlRPIHRpZF90YWIgVkFMVUVTICgxKSwgKDIpOwogU0VM RUNUIG1pbihjdGlkKSBGUk9NIHRpZF90YWI7CiBTRUxFQ1QgbWF4KGN0aWQpIEZST00gdGlkX3Rh YjsKKworLS0gdGlkX2Jsb2NrKCkgYW5kIHRpZF9vZmZzZXQoKSB3aXRoIHJlYWwgdGFibGUgY3Rp ZAorU0VMRUNUIGN0aWQsIHRpZF9ibG9jayhjdGlkKSwgdGlkX29mZnNldChjdGlkKSBGUk9NIHRp ZF90YWI7CistLSB1c2UgaW4gV0hFUkUgY2xhdXNlCitTRUxFQ1QgY3RpZCBGUk9NIHRpZF90YWIg V0hFUkUgdGlkX2Jsb2NrKGN0aWQpID0gMCBBTkQgdGlkX29mZnNldChjdGlkKSA9IDE7CiBUUlVO Q0FURSB0aWRfdGFiOwogCiAtLSBUZXN0cyBmb3IgY3VycnRpZDIoKSB3aXRoIHZhcmlvdXMgcmVs YXRpb24ga2luZHMKLS0gCjIuNDMuMAoK --000000000000109d2c064c7462b5--