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 1rvF4J-00AhMi-Vb for pgsql-general@arkaria.postgresql.org; Fri, 12 Apr 2024 11:27:44 +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 1rvF4I-00D8gj-0X for pgsql-general@arkaria.postgresql.org; Fri, 12 Apr 2024 11:27:42 +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.94.2) (envelope-from ) id 1rvF4H-00D8gZ-Dc for pgsql-general@lists.postgresql.org; Fri, 12 Apr 2024 11:27:41 +0000 Received: from mail-ed1-x531.google.com ([2a00:1450:4864:20::531]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rvF4E-002Uza-L7 for pgsql-general@lists.postgresql.org; Fri, 12 Apr 2024 11:27:40 +0000 Received: by mail-ed1-x531.google.com with SMTP id 4fb4d7f45d1cf-56845954ffeso915743a12.2 for ; Fri, 12 Apr 2024 04:27:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712921257; x=1713526057; 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=kG+aSFatEqpnLUNJr24vrK9ngRD2acYJWiPwKxbgCN0=; b=apTXroSITouFhnClin38MRefxkE6q7FwOyKVa6+gqYWqZwAH8+nhTXNkzn7Tt2k7Ad uv/hQlDTtZ/BkpVs6/ZftNOZ/hm7E7YJQ/Tptz5XRQvlGrNVh/NzL1E6ZU0efDTvs1d9 Y3sot3a0J/RCi2zElLbZOXKMVHQEYovySnyJlr75Hq+62VXMRYmwq0mqIGmgADjizwtu ozQfqKnHj04HHEyfIyka8nw5md/k9dNg7DWBR//uuzJRA+Ycl313Z3OioIMhnKYf0XoV DfHcdV6F4NEUOR1k1uYiWSDNg0R6ZqP24xFxC6qqd7XQ5iLajSAyYGwIkRQl1EJk6NVx QrZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712921257; x=1713526057; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=kG+aSFatEqpnLUNJr24vrK9ngRD2acYJWiPwKxbgCN0=; b=eGerSBkvfSITHeDXMOv/Hz1WYOP08afPDKKjKhbxmde8C4W3CMFcX5Ja+rjIUO7ypw zy2E8/8JHsR3O/qpUXn3xbHiFq96ukngwF7OGgtDW8eJTjxp7b32/NQWckLPoX9XPOht hEt86A60P4i3i/Ofjcn0XGAc0NeouhgD1R55c8ySahLygBZ+gZD/cmcGMCrDAIW/Psi8 lphU6hs5C0TLtU1/gX4WBMyRrU1MITFzRDrgh1KHn6/fAi7Wt+SaVeFc9dPA377mE86c X7XYkt9X/I8FHWj2OWyb25niDjYEvQ5bsuyJcp1V9oHvAmlpY3OBR/gq5oglSkbYdbqz RI9g== X-Gm-Message-State: AOJu0Yz5te2FzeWpfRslzwnGDVN4SCNc0nrvGzr3VU7ZhYFicEt1sRto vAbk7bYSFJiHEUp6/feupKwHJXgTVQzXQ0kZUm1v6hHShbWd0+bfYfz0WIY8e2IUhfrd7IO2hU0 nZ2BoqifuFNn6cIjjgrFOPkCCmbAMUDtl X-Google-Smtp-Source: AGHT+IGlpuhrPBEqZ7s0AJ/ZrXX/9GoyPjbcoc5XezSoQds+LKLCXStvo8+UalS1xwzDJnZ+znvlp90AIZptqexdZE8= X-Received: by 2002:a17:906:4f06:b0:a51:7a72:294d with SMTP id t6-20020a1709064f0600b00a517a72294dmr1673669eju.2.1712921256971; Fri, 12 Apr 2024 04:27:36 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Thierry Henrio Date: Fri, 12 Apr 2024 13:27:25 +0200 Message-ID: Subject: Re: effect on planner of turning a subquery to a table, sql function returning table To: David Rowley Cc: pgsql-general@lists.postgresql.org Content-Type: multipart/alternative; boundary="0000000000000cd5820615e48fc3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000cd5820615e48fc3 Content-Type: text/plain; charset="UTF-8" Thanks David! Here are the plans with (ANALYZE, BUFFERS), and track_io_timing ON: (A) GroupAggregate (cost=401037.82..503755.82 rows=1467400 width=124) (actual time=416.851..426.534 rows=4670 loops=1) Group Key: t.device_id, t.date, t.start_time, t.end_time, (timerange(((t_1.value ->> 0))::time without time zone, ((t_1.value ->> 1))::time without time zone)) Buffers: shared hit=3067 -> Sort (cost=401037.82..404706.32 rows=1467400 width=96) (actual time=416.812..417.855 rows=22908 loops=1) Sort Key: t.device_id, t.date, t.start_time, t.end_time, (timerange(((t_1.value ->> 0))::time without time zone, ((t_1.value ->> 1))::time without time zone)), t.rank Sort Method: quicksort Memory: 3229kB Buffers: shared hit=3067 -> Nested Loop (cost=2.99..100268.62 rows=1467400 width=96) (actual time=371.380..395.324 rows=22908 loops=1) Buffers: shared hit=3067 -> Nested Loop (cost=2.98..55962.20 rows=14674 width=64) (actual time=371.362..376.059 rows=11454 loops=1) Buffers: shared hit=3067 -> Nested Loop (cost=2.54..39.31 rows=500 width=40) (actual time=371.332..371.337 rows=1 loops=1) Buffers: shared hit=3 -> Index Scan using campaigns_pkey on campaigns c (cost=0.28..8.30 rows=1 width=355) (actual time=371.243..371.244 rows=1 loops=1) Index Cond: (id = 11870) Buffers: shared hit=3 -> Hash Join (cost=2.26..26.01 rows=500 width=40) (actual time=0.083..0.086 rows=1 loops=1) Hash Cond: (EXTRACT(dow FROM d.date) = ((j.dow)::integer)::numeric) -> Function Scan on generate_series d (cost=0.01..10.01 rows=1000 width=8) (actual time=0.025..0.026 rows=1 loops=1) -> Hash (cost=1.00..1.00 rows=100 width=64) (actual time=0.040..0.040 rows=7 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 9kB -> Function Scan on jsonb_each j (cost=0.00..1.00 rows=100 width=64) (actual time=0.015..0.016 rows=7 loops=1) -> Index Scan using device_timeslots_date_index on device_timeslots t (cost=0.43..111.56 rows=29 width=32) (actual time=0.023..3.477 rows=11454 loops=1) Index Cond: ((date = d.date) AND (date >= '2024-04-26'::date) AND (date <= '2024-04-26'::date)) Buffers: shared hit=3064 -> Memoize (cost=0.01..1.01 rows=100 width=32) (actual time=0.000..0.000 rows=2 loops=11454) Cache Key: j.times Cache Mode: binary Hits: 11453 Misses: 1 Evictions: 0 Overflows: 0 Memory Usage: 1kB -> Function Scan on jsonb_array_elements t_1 (cost=0.00..1.00 rows=100 width=32) (actual time=0.004..0.005 rows=2 loops=1) Planning: Buffers: shared hit=4 Planning Time: 0.455 ms JIT: Functions: 36 Options: Inlining true, Optimization true, Expressions true, Deforming true Timing: Generation 1.949 ms, Inlining 28.891 ms, Optimization 207.481 ms, Emission 134.907 ms, Total 373.228 ms Execution Time: 429.037 ms And (B) GroupAggregate (cost=70121.37..71282.14 rows=33165 width=124) (actual time=37.895..48.577 rows=4670 loops=1) Group Key: t.device_id, t.date, t.start_time, t.end_time, z.times Buffers: shared hit=3064, local hit=1 -> Sort (cost=70121.37..70204.28 rows=33165 width=64) (actual time=37.874..38.979 rows=22908 loops=1) Sort Key: t.device_id, t.date, t.start_time, t.end_time, z.times, t.rank Sort Method: quicksort Memory: 2737kB Buffers: shared hit=3064, local hit=1 -> Merge Join (cost=67127.99..67631.11 rows=33165 width=64) (actual time=9.587..15.797 rows=22908 loops=1) Merge Cond: (z.date = t.date) Buffers: shared hit=3064, local hit=1 -> Sort (cost=78.60..81.43 rows=1130 width=40) (actual time=0.030..0.031 rows=2 loops=1) Sort Key: z.date Sort Method: quicksort Memory: 25kB Buffers: local hit=1 -> Seq Scan on z11870 z (cost=0.00..21.30 rows=1130 width=40) (actual time=0.016..0.018 rows=2 loops=1) Buffers: local hit=1 -> Sort (cost=67049.39..67109.04 rows=23861 width=32) (actual time=9.549..10.720 rows=22907 loops=1) Sort Key: t.date Sort Method: quicksort Memory: 1100kB Buffers: shared hit=3064 -> Bitmap Heap Scan on device_timeslots t (cost=329.01..65314.41 rows=23861 width=32) (actual time=2.952..7.534 rows=11454 loops=1) Recheck Cond: ((date >= '2024-04-26'::date) AND (date <= '2024-04-26'::date)) Heap Blocks: exact=3052 Buffers: shared hit=3064 -> Bitmap Index Scan on device_timeslots_date_index (cost=0.00..323.05 rows=23861 width=0) (actual time=1.648..1.648 rows=11454 loops=1) Index Cond: ((date >= '2024-04-26'::date) AND (date <= '2024-04-26'::date)) Buffers: shared hit=12 Planning: Buffers: shared hit=4 Planning Time: 0.587 ms Execution Time: 49.163 ms Both look correct on buffer hit? The first hits too much (11453) ? --0000000000000cd5820615e48fc3 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+VGhhbmtzIERhdmlkITxicj48YnI+SGVyZSBh cmUgdGhlIHBsYW5zIHdpdGggKEFOQUxZWkUsIEJVRkZFUlMpLCBhbmQgdHJhY2tfaW9fdGltaW5n IE9OOjxicj48YnI+KEEpPGJyPjxicj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNl Ij7CoEdyb3VwQWdncmVnYXRlIMKgKGNvc3Q9NDAxMDM3LjgyLi41MDM3NTUuODIgcm93cz0xNDY3 NDAwIHdpZHRoPTEyNCkgKGFjdHVhbCB0aW1lPTQxNi44NTEuLjQyNi41MzQgcm93cz00NjcwIGxv b3BzPTEpPGJyPsKgIMKgR3JvdXAgS2V5OiB0LmRldmljZV9pZCwgdC5kYXRlLCB0LnN0YXJ0X3Rp bWUsIHQuZW5kX3RpbWUsICh0aW1lcmFuZ2UoKCh0XzEudmFsdWUgLSZndDsmZ3Q7IDApKTo6dGlt ZSB3aXRob3V0IHRpbWUgem9uZSwgKCh0XzEudmFsdWUgLSZndDsmZ3Q7IDEpKTo6dGltZSB3aXRo b3V0IHRpbWUgem9uZSkpPGJyPsKgIMKgQnVmZmVyczogc2hhcmVkIGhpdD0zMDY3PGJyPsKgIMKg LSZndDsgwqBTb3J0IMKgKGNvc3Q9NDAxMDM3LjgyLi40MDQ3MDYuMzIgcm93cz0xNDY3NDAwIHdp ZHRoPTk2KSAoYWN0dWFsIHRpbWU9NDE2LjgxMi4uNDE3Ljg1NSByb3dzPTIyOTA4IGxvb3BzPTEp PGJyPsKgIMKgIMKgIMKgIMKgU29ydCBLZXk6IHQuZGV2aWNlX2lkLCB0LmRhdGUsIHQuc3RhcnRf dGltZSwgdC5lbmRfdGltZSwgKHRpbWVyYW5nZSgoKHRfMS52YWx1ZSAtJmd0OyZndDsgMCkpOjp0 aW1lIHdpdGhvdXQgdGltZSB6b25lLCAoKHRfMS52YWx1ZSAtJmd0OyZndDsgMSkpOjp0aW1lIHdp dGhvdXQgdGltZSB6b25lKSksIHQucmFuazxicj7CoCDCoCDCoCDCoCDCoFNvcnQgTWV0aG9kOiBx dWlja3NvcnQgwqBNZW1vcnk6IDMyMjlrQjxicj7CoCDCoCDCoCDCoCDCoEJ1ZmZlcnM6IHNoYXJl ZCBoaXQ9MzA2Nzxicj7CoCDCoCDCoCDCoCDCoC0mZ3Q7IMKgTmVzdGVkIExvb3AgwqAoY29zdD0y Ljk5Li4xMDAyNjguNjIgcm93cz0xNDY3NDAwIHdpZHRoPTk2KSAoYWN0dWFsIHRpbWU9MzcxLjM4 MC4uMzk1LjMyNCByb3dzPTIyOTA4IGxvb3BzPTEpPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg QnVmZmVyczogc2hhcmVkIGhpdD0zMDY3PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLSZndDsg wqBOZXN0ZWQgTG9vcCDCoChjb3N0PTIuOTguLjU1OTYyLjIwIHJvd3M9MTQ2NzQgd2lkdGg9NjQp IChhY3R1YWwgdGltZT0zNzEuMzYyLi4zNzYuMDU5IHJvd3M9MTE0NTQgbG9vcHM9MSk8YnI+wqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBCdWZmZXJzOiBzaGFyZWQgaGl0PTMwNjc8YnI+ wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAtJmd0OyDCoE5lc3RlZCBMb29wIMKgKGNv c3Q9Mi41NC4uMzkuMzEgcm93cz01MDAgd2lkdGg9NDApIChhY3R1YWwgdGltZT0zNzEuMzMyLi4z NzEuMzM3IHJvd3M9MSBsb29wcz0xKTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9Mzxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoC0mZ3Q7IMKgSW5kZXggU2NhbiB1c2luZyBjYW1wYWlnbnNfcGtl eSBvbiBjYW1wYWlnbnMgYyDCoChjb3N0PTAuMjguLjguMzAgcm93cz0xIHdpZHRoPTM1NSkgKGFj dHVhbCB0aW1lPTM3MS4yNDMuLjM3MS4yNDQgcm93cz0xIGxvb3BzPTEpPGJyPsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgSW5kZXggQ29uZDogKGlkID0g MTE4NzApPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgQnVmZmVyczogc2hhcmVkIGhpdD0zPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgLSZndDsgwqBIYXNoIEpvaW4gwqAoY29zdD0yLjI2Li4yNi4wMSByb3dzPTUw MCB3aWR0aD00MCkgKGFjdHVhbCB0aW1lPTAuMDgzLi4wLjA4NiByb3dzPTEgbG9vcHM9MSk8YnI+ wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBIYXNoIENv bmQ6IChFWFRSQUNUKGRvdyBGUk9NIGQuZGF0ZSkgPSAoKGouZG93KTo6aW50ZWdlcik6Om51bWVy aWMpPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg LSZndDsgwqBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBkIMKgKGNvc3Q9MC4wMS4u MTAuMDEgcm93cz0xMDAwIHdpZHRoPTgpIChhY3R1YWwgdGltZT0wLjAyNS4uMC4wMjYgcm93cz0x IGxvb3BzPTEpPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgLSZndDsgwqBIYXNoIMKgKGNvc3Q9MS4wMC4uMS4wMCByb3dzPTEwMCB3aWR0aD02NCkg KGFjdHVhbCB0aW1lPTAuMDQwLi4wLjA0MCByb3dzPTcgbG9vcHM9MSk8YnI+wqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBCdWNrZXRzOiAx MDI0IMKgQmF0Y2hlczogMSDCoE1lbW9yeSBVc2FnZTogOWtCPGJyPsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLSZndDsgwqBGdW5jdGlv biBTY2FuIG9uIGpzb25iX2VhY2ggaiDCoChjb3N0PTAuMDAuLjEuMDAgcm93cz0xMDAgd2lkdGg9 NjQpIChhY3R1YWwgdGltZT0wLjAxNS4uMC4wMTYgcm93cz03IGxvb3BzPTEpPGJyPsKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLSZndDsgwqBJbmRleCBTY2FuIHVzaW5nIGRldmljZV90 aW1lc2xvdHNfZGF0ZV9pbmRleCBvbiBkZXZpY2VfdGltZXNsb3RzIHQgwqAoY29zdD0wLjQzLi4x MTEuNTYgcm93cz0yOSB3aWR0aD0zMikgKGFjdHVhbCB0aW1lPTAuMDIzLi4zLjQ3NyByb3dzPTEx NDU0IGxvb3BzPTEpPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg SW5kZXggQ29uZDogKChkYXRlID0gZC5kYXRlKSBBTkQgKGRhdGUgJmd0Oz0gJiMzOTsyMDI0LTA0 LTI2JiMzOTs6OmRhdGUpIEFORCAoZGF0ZSAmbHQ7PSAmIzM5OzIwMjQtMDQtMjYmIzM5Ozo6ZGF0 ZSkpPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgQnVmZmVyczog c2hhcmVkIGhpdD0zMDY0PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLSZndDsgwqBNZW1vaXpl IMKgKGNvc3Q9MC4wMS4uMS4wMSByb3dzPTEwMCB3aWR0aD0zMikgKGFjdHVhbCB0aW1lPTAuMDAw Li4wLjAwMCByb3dzPTIgbG9vcHM9MTE0NTQpPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgQ2FjaGUgS2V5OiBqLnRpbWVzPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgQ2FjaGUgTW9kZTogYmluYXJ5PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg SGl0czogMTE0NTMgwqBNaXNzZXM6IDEgwqBFdmljdGlvbnM6IDAgwqBPdmVyZmxvd3M6IDAgwqBN ZW1vcnkgVXNhZ2U6IDFrQjxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC0mZ3Q7 IMKgRnVuY3Rpb24gU2NhbiBvbiBqc29uYl9hcnJheV9lbGVtZW50cyB0XzEgwqAoY29zdD0wLjAw Li4xLjAwIHJvd3M9MTAwIHdpZHRoPTMyKSAoYWN0dWFsIHRpbWU9MC4wMDQuLjAuMDA1IHJvd3M9 MiBsb29wcz0xKTxicj7CoFBsYW5uaW5nOjxicj7CoCDCoEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9NDxi cj7CoFBsYW5uaW5nIFRpbWU6IDAuNDU1IG1zPGJyPsKgSklUOjxicj7CoCDCoEZ1bmN0aW9uczog MzY8YnI+wqAgwqBPcHRpb25zOiBJbmxpbmluZyB0cnVlLCBPcHRpbWl6YXRpb24gdHJ1ZSwgRXhw cmVzc2lvbnMgdHJ1ZSwgRGVmb3JtaW5nIHRydWU8YnI+wqAgwqBUaW1pbmc6IEdlbmVyYXRpb24g MS45NDkgbXMsIElubGluaW5nIDI4Ljg5MSBtcywgT3B0aW1pemF0aW9uIDIwNy40ODEgbXMsIEVt aXNzaW9uIDEzNC45MDcgbXMsIFRvdGFsIDM3My4yMjggbXM8YnI+wqBFeGVjdXRpb24gVGltZTog NDI5LjAzNyBtczwvc3Bhbj48YnI+PGJyPkFuZCAoQik8YnI+PGJyPjxzcGFuIHN0eWxlPSJmb250 LWZhbWlseTptb25vc3BhY2UiPsKgR3JvdXBBZ2dyZWdhdGUgwqAoY29zdD03MDEyMS4zNy4uNzEy ODIuMTQgcm93cz0zMzE2NSB3aWR0aD0xMjQpIChhY3R1YWwgdGltZT0zNy44OTUuLjQ4LjU3NyBy b3dzPTQ2NzAgbG9vcHM9MSk8YnI+wqAgwqBHcm91cCBLZXk6IHQuZGV2aWNlX2lkLCB0LmRhdGUs IHQuc3RhcnRfdGltZSwgdC5lbmRfdGltZSwgei50aW1lczxicj7CoCDCoEJ1ZmZlcnM6IHNoYXJl ZCBoaXQ9MzA2NCwgbG9jYWwgaGl0PTE8YnI+wqAgwqAtJmd0OyDCoFNvcnQgwqAoY29zdD03MDEy MS4zNy4uNzAyMDQuMjggcm93cz0zMzE2NSB3aWR0aD02NCkgKGFjdHVhbCB0aW1lPTM3Ljg3NC4u MzguOTc5IHJvd3M9MjI5MDggbG9vcHM9MSk8YnI+wqAgwqAgwqAgwqAgwqBTb3J0IEtleTogdC5k ZXZpY2VfaWQsIHQuZGF0ZSwgdC5zdGFydF90aW1lLCB0LmVuZF90aW1lLCB6LnRpbWVzLCB0LnJh bms8YnI+wqAgwqAgwqAgwqAgwqBTb3J0IE1ldGhvZDogcXVpY2tzb3J0IMKgTWVtb3J5OiAyNzM3 a0I8YnI+wqAgwqAgwqAgwqAgwqBCdWZmZXJzOiBzaGFyZWQgaGl0PTMwNjQsIGxvY2FsIGhpdD0x PGJyPsKgIMKgIMKgIMKgIMKgLSZndDsgwqBNZXJnZSBKb2luIMKgKGNvc3Q9NjcxMjcuOTkuLjY3 NjMxLjExIHJvd3M9MzMxNjUgd2lkdGg9NjQpIChhY3R1YWwgdGltZT05LjU4Ny4uMTUuNzk3IHJv d3M9MjI5MDggbG9vcHM9MSk8YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBNZXJnZSBDb25kOiAo ei5kYXRlID0gdC5kYXRlKTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEJ1ZmZlcnM6IHNoYXJl ZCBoaXQ9MzA2NCwgbG9jYWwgaGl0PTE8YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAtJmd0OyDC oFNvcnQgwqAoY29zdD03OC42MC4uODEuNDMgcm93cz0xMTMwIHdpZHRoPTQwKSAoYWN0dWFsIHRp bWU9MC4wMzAuLjAuMDMxIHJvd3M9MiBsb29wcz0xKTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoFNvcnQgS2V5OiB6LmRhdGU8YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqBTb3J0IE1ldGhvZDogcXVpY2tzb3J0IMKgTWVtb3J5OiAyNWtCPGJyPsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgQnVmZmVyczogbG9jYWwgaGl0PTE8YnI+wqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAtJmd0OyDCoFNlcSBTY2FuIG9uIHoxMTg3MCB6IMKgKGNvc3Q9 MC4wMC4uMjEuMzAgcm93cz0xMTMwIHdpZHRoPTQwKSAoYWN0dWFsIHRpbWU9MC4wMTYuLjAuMDE4 IHJvd3M9MiBsb29wcz0xKTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoEJ1ZmZlcnM6IGxvY2FsIGhpdD0xPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLSZndDsg wqBTb3J0IMKgKGNvc3Q9NjcwNDkuMzkuLjY3MTA5LjA0IHJvd3M9MjM4NjEgd2lkdGg9MzIpIChh Y3R1YWwgdGltZT05LjU0OS4uMTAuNzIwIHJvd3M9MjI5MDcgbG9vcHM9MSk8YnI+wqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBTb3J0IEtleTogdC5kYXRlPGJyPsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgU29ydCBNZXRob2Q6IHF1aWNrc29ydCDCoE1lbW9yeTogMTEwMGtC PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgQnVmZmVyczogc2hhcmVkIGhpdD0z MDY0PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLSZndDsgwqBCaXRtYXAgSGVh cCBTY2FuIG9uIGRldmljZV90aW1lc2xvdHMgdCDCoChjb3N0PTMyOS4wMS4uNjUzMTQuNDEgcm93 cz0yMzg2MSB3aWR0aD0zMikgKGFjdHVhbCB0aW1lPTIuOTUyLi43LjUzNCByb3dzPTExNDU0IGxv b3BzPTEpPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgUmVjaGVj ayBDb25kOiAoKGRhdGUgJmd0Oz0gJiMzOTsyMDI0LTA0LTI2JiMzOTs6OmRhdGUpIEFORCAoZGF0 ZSAmbHQ7PSAmIzM5OzIwMjQtMDQtMjYmIzM5Ozo6ZGF0ZSkpPGJyPsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgSGVhcCBCbG9ja3M6IGV4YWN0PTMwNTI8YnI+wqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBCdWZmZXJzOiBzaGFyZWQgaGl0PTMw NjQ8YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAtJmd0OyDCoEJp dG1hcCBJbmRleCBTY2FuIG9uIGRldmljZV90aW1lc2xvdHNfZGF0ZV9pbmRleCDCoChjb3N0PTAu MDAuLjMyMy4wNSByb3dzPTIzODYxIHdpZHRoPTApIChhY3R1YWwgdGltZT0xLjY0OC4uMS42NDgg cm93cz0xMTQ1NCBsb29wcz0xKTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoEluZGV4IENvbmQ6ICgoZGF0ZSAmZ3Q7PSAmIzM5OzIwMjQtMDQtMjYm IzM5Ozo6ZGF0ZSkgQU5EIChkYXRlICZsdDs9ICYjMzk7MjAyNC0wNC0yNiYjMzk7OjpkYXRlKSk8 YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBCdWZm ZXJzOiBzaGFyZWQgaGl0PTEyPGJyPsKgUGxhbm5pbmc6PGJyPsKgIMKgQnVmZmVyczogc2hhcmVk IGhpdD00PGJyPsKgUGxhbm5pbmcgVGltZTogMC41ODcgbXM8YnI+wqBFeGVjdXRpb24gVGltZTog NDkuMTYzIG1zPC9zcGFuPjxicj48YnI+PGJyPjwvZGl2PkJvdGggbG9vayBjb3JyZWN0IG9uIGJ1 ZmZlciBoaXQ/IFRoZSBmaXJzdCBoaXRzIHRvbyBtdWNoICg8c3BhbiBzdHlsZT0iZm9udC1mYW1p bHk6bW9ub3NwYWNlIj4xMTQ1Mzwvc3Bhbj4pID88YnI+PC9kaXY+DQo= --0000000000000cd5820615e48fc3--