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 1vRET3-00ACcm-2w for pgsql-performance@arkaria.postgresql.org; Thu, 04 Dec 2025 18:54:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vRET3-004Ezl-08 for pgsql-performance@arkaria.postgresql.org; Thu, 04 Dec 2025 18:54:17 +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 1vRET2-004Ezc-1w for pgsql-performance@lists.postgresql.org; Thu, 04 Dec 2025 18:54:17 +0000 Received: from mail-yw1-x112b.google.com ([2607:f8b0:4864:20::112b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vRET0-0039Rc-1R for pgsql-performance@lists.postgresql.org; Thu, 04 Dec 2025 18:54:16 +0000 Received: by mail-yw1-x112b.google.com with SMTP id 00721157ae682-78a6a7654a4so14038457b3.0 for ; Thu, 04 Dec 2025 10:54:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764874452; x=1765479252; 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=8JwH+x5sMIPCFoCmjoAcgazh8HRUUCKERFHZKzb/EQ0=; b=SBGljLnDG7/+suW/dkTxvOMbAMt6kX1+/aXqxrMtVEMPicVO9f9WGivGC2wBkiaX3u kjv9G0velvu2/ygSKhk3E7sq7sl/UXDfbAT5fByMnLCAwThTgYbMYJywkRUo+NJ6NZ7R bM8KUTtEFYBtkuqSyv+UvY3eqnq1pJmhfsn/HkzCtSMhUmCkq0k1rW01sJhLdgeJUC7P G/AivWKePCZizHzWZM/3Lvkf9A67hRXGBINs1nJKB7fZ8J3xb5ZiQYskJ9fXU/bErYNp CHgRYUHzv40y3qZtIRN9ypmU42z4hnlfAB1mwFxBWrnTSaolUBlWhymTmCjB3lamOMo1 /FZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764874452; x=1765479252; 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=8JwH+x5sMIPCFoCmjoAcgazh8HRUUCKERFHZKzb/EQ0=; b=H6cwY0EX6hg/zbcZxuTn4GVwxz29a+RH5KeCyDQHMhUBFud0r+8cY11fxTS3Ya9rwY N0sHkehW9RgSCq9+7i67hAAGfRWVkzk5DLt1FA8siC49/0jlAszGcNlzkyzziCD7NMp6 OQesrL6zqChrXEFe/MnD2EbbPv0phWgCTed95HNPjYtAAwmTd7wL03U3vIJrH8vEj/CY 2T/YTmWmjOEx+U/2/FlQ++9+ookXncLvN2LiVJwOxbqiJqn4//9UVxdfdPnPJaJaOmRO +tCej9tHxVD+Mtn15RPFXa/162iUybyewDeSqqhQ/jQMiq12CBzlH4s3SY8g8+cvSbqz wkbA== X-Gm-Message-State: AOJu0YyrKGihqkssAHxOrjAnLaKrsTYAKPy/odJmb0a1bTxE/RKmgR41 +rBscsmdYMFi3n45x4RA1IuZZglWZXQdm3em5GaMtcPHGwE5IA/O8J1elLLawZHNtWolPcCzMwm 8/uhEsmw3qxcENpjlFZQQ7FFh+BluBmU= X-Gm-Gg: ASbGnctPqZUz8rA+8qy47IqwV6kEYM6ozRva1iWvG6PQNNSz8gaufxyqDcOty6NHN31 M35qW5Ji3zrUOnWkLW6DliRY+jsz3rHPCb2na1D20lmYh+3mO3OgDU4hoKUQvLfrY/q752NOrSy 4+vRgkZ/yU9RDmZe8lkppDEprYHkN7QF8j0deJC7P9lVpgadotM6eyOEUO0UD8+RSzpAQTNae3s 1/siEuNRpy0+cGlRxAqDHUjzpOIBq/SjxnG9iM1e7wzAPlR6OU90lUw1DzJkRblLv7d99fZCqqA j/OSvZAbDoD+sEO3Yz4zcr6F2/9Pmux1EqyaWsBezV+F+l68BgGqiQljvL45RpqT4ipgiUqeeMd NDBFFnTeRI773K09epfycp5mL X-Google-Smtp-Source: AGHT+IGGAMI/gm+XNYjZgOFymIJcvttGqKnlO3pk3JBNu7f7bjmBfvKZgLyEbLr5UKbwAHSUK0kyw7FoALf2CrxuldQ= X-Received: by 2002:a05:690c:3393:b0:786:379a:51e7 with SMTP id 00721157ae682-78c0bf4151fmr59216137b3.16.1764874452200; Thu, 04 Dec 2025 10:54:12 -0800 (PST) MIME-Version: 1.0 References: <20251204194644.12e3a51a77da38dc072bc262@wanadoo.fr> In-Reply-To: <20251204194644.12e3a51a77da38dc072bc262@wanadoo.fr> From: Pavel Stehule Date: Thu, 4 Dec 2025 19:53:34 +0100 X-Gm-Features: AWmQ_bmGkBJOClcGKrFtWfjqJFxiqBccrPxWkDO7bxITi_6H0pxcqBCDMi8IMSk Message-ID: Subject: Re: Why is my query 3 times faster on my workstation than on my server? To: Vincent Veyron Cc: pgsql-performance@lists.postgresql.org Content-Type: multipart/alternative; boundary="000000000000cbf1c5064524dad8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cbf1c5064524dad8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi =C4=8Dt 4. 12. 2025 v 19:46 odes=C3=ADlatel Vincent Veyron napsal: > Hi, > > Using the same query, with the same database on both machine, plans and > estimates are quasi identical, but actual cost is multiplied by three on = my > server compared to my workstation, for all nodes in the plan. Can you tel= l > me what explains the difference? > > I work with PostgreSQL 15.14 on Debian Old Stable (bookworm). > > My workstation is a Lenovo X250 with 8GB RAM and an Intel(R) Core(TM) > i5-5300U CPU @ 2.30GHz (4 cores) > cpu MHz : 500.000 > cache size : 3072 KB > > My server is a Start-3-S-SSD server from online.net with 4 GB RAM and an > Intel(R) Atom(TM) CPU C2338 @ 1.74GHz (2 cores) > cpu MHz : 1198.820 > cache size : 1024 KB > Intel Atom is slow CPU https://en.wikipedia.org/wiki/Intel_Atom Regards Pavel > > The query selects ~ 18 000 rows out of ~ 100 000 in table 'tbljournal', > calcultates several window functions on the results, then joins to anothe= r > small table (10 000 rows). > > Below the two plans, followed by non-standard settings in postgresql.conf > (they are identical on both machines), and the table's schema at the bott= om. > > ############################## > Explain analyze on the workstation > ############################## > > 2025-12-04 17:09:28.133 CET [14576] www-data@compta LOG: duration: > 210.004 ms plan: > Query Text: > WITH t1 AS NOT MATERIALIZED ( > SELECT id_client, fiscal_year, numero_compte, id_entry, id_line, > date_ecriture, substring(libelle_journal FOR 24) as libelle_journal, > substring(coalesce(id_facture, ' ') FOR 14) as id_facture, > substring(coalesce(id_paiement, ' ') FOR 14) as id_paiement, > substring(coalesce(libelle, ' ') FOR 34) as libelle, > debit/100::numeric as debit, credit/100::numeric as credit, lettrage, > pointage, 0 as lettrage_check, to_char(sum(debit/100::numeric) over > (PARTITION BY numero_compte), '999G999G999G990D00') as total_debit, > to_char(sum(credit/100::numeric) over (PARTITION BY numero_compte), > '999G999G999G990D00') as total_credit, > to_char(sum((credit-debit)/100::numeric) over (PARTITION BY numero_compte > ORDER BY date_ecriture, id_line), '999G999G999G990D00') as solde, > to_char(sum(debit/100::numeric) over (), '999G999G999G990D00') as > grand_total_debit, to_char(sum(credit/100::numeric) over (), > '999G999G999G990D00') as grand_total_credit, count(*) over () as lines, > coalesce(libelle_section, '') as libelle_section, row_number() over (ORDE= R > BY numero_compte, date_ecriture, id_line) as row_number > FROM tbljournal > WHERE id_client =3D $1 and fiscal_year =3D $2 > ORDER BY numero_compte, date_ecriture, id_line > ) > SELECT t1.numero_compte, regexp_replace(t2.libelle_compte, '\s', > ' ', 'g') as libelle_compte, id_entry, id_line, date_ecriture, > libelle_journal, coalesce(id_facture, ' ') as id_facture, > coalesce(id_paiement, ' ') as id_paiement, coalesce(libelle, ' = ') > as libelle, to_char(debit, '999G999G999G990D00') as debit, to_char(credit= , > '999G999G999G990D00') as credit, lettrage_check, pointage, total_debit, > total_credit, solde, grand_total_debit, grand_total_credit, > libelle_section, lettrage, lines > FROM t1 INNER JOIN tblcompte t2 using (id_client, fiscal_year, > numero_compte) > WHERE row_number > 2000 AND row_number < 3001 > > ORDER BY row_number > > > Sort (cost=3D3925.35..3926.60 rows=3D501 width=3D458) (actual > time=3D208.061..208.142 rows=3D1000 loops=3D1) > Sort Key: t1.row_number > Sort Method: quicksort Memory: 384kB > Buffers: shared hit=3D3565, temp read=3D341 written=3D298 > -> Hash Join (cost=3D352.95..3902.88 rows=3D501 width=3D458) = (actual > time=3D137.771..206.979 rows=3D1000 loops=3D1) > Hash Cond: ((t1.id_client =3D t2.id_client) AND > (t1.fiscal_year =3D t2.fiscal_year) AND (t1.numero_compte =3D t2.numero_c= ompte)) > Buffers: shared hit=3D3565, temp read=3D341 written=3D298 > -> Subquery Scan on t1 (cost=3D1.75..3520.49 rows=3D348= 4 > width=3D434) (actual time=3D132.109..195.096 rows=3D1000 loops=3D1) > Filter: (t1.row_number > 2000) > Rows Removed by Filter: 2000 > Buffers: shared hit=3D3480, temp read=3D341 written= =3D298 > -> WindowAgg (cost=3D1.75..3389.84 rows=3D10452 > width=3D434) (actual time=3D123.125..194.702 rows=3D3000 loops=3D1) > Filter: ((row_number() OVER (?)) < 3001) > Rows Removed by Filter: 15188 > Buffers: shared hit=3D3480, temp read=3D341 > written=3D298 > -> WindowAgg (cost=3D1.75..2762.72 rows=3D1= 0452 > width=3D223) (actual time=3D0.122..96.685 rows=3D18188 loops=3D1) > Buffers: shared hit=3D3480 > -> WindowAgg (cost=3D1.75..2475.29 > rows=3D10452 width=3D159) (actual time=3D0.113..70.644 rows=3D18188 loops= =3D1) > Run Condition: (row_number() OVER > (?) < 3001) > Buffers: shared hit=3D3480 > -> WindowAgg (cost=3D1.75..2266= .25 > rows=3D10452 width=3D151) (actual time=3D0.103..55.901 rows=3D18188 loops= =3D1) > Buffers: shared hit=3D3480 > -> Incremental Sort > (cost=3D1.75..1978.82 rows=3D10452 width=3D119) (actual time=3D0.089..27.= 708 > rows=3D18188 loops=3D1) > Sort Key: > tbljournal.numero_compte, tbljournal.date_ecriture, tbljournal.id_line > Presorted Key: > tbljournal.numero_compte > Full-sort Groups: 44 > Sort Method: quicksort Average Memory: 28kB Peak Memory: 28kB > Pre-sorted Groups: 51 > Sort Method: quicksort Average Memory: 535kB Peak Memory: 844kB > Buffers: shared > hit=3D3480 > -> Index Scan using > tbljournal_client_year_compte_idx on tbljournal (cost=3D0.29..1523.37 > rows=3D10452 width=3D119) (actual time=3D0.023..11.331 rows=3D18188 loops= =3D1) > Index Cond: > ((id_client =3D 2739) AND (fiscal_year =3D 2024)) > Buffers: shared > hit=3D3480 > -> Hash (cost=3D181.80..181.80 rows=3D9680 width=3D36) = (actual > time=3D5.616..5.617 rows=3D9680 loops=3D1) > Buckets: 16384 Batches: 1 Memory Usage: 794kB > Buffers: shared hit=3D85 > -> Seq Scan on tblcompte t2 (cost=3D0.00..181.80 > rows=3D9680 width=3D36) (actual time=3D0.018..1.888 rows=3D9680 loops=3D1= ) > Buffers: shared hit=3D85 > > ############################## > Explain analyze on the server > ############################## > > 2025-12-04 17:33:00.870 CET [536393] www-data@compta LOG: duration: > 879.686 ms plan: > Query Text: > WITH t1 AS NOT MATERIALIZED ( > SELECT id_client, fiscal_year, numero_compte, id_entry, id_line, > date_ecriture, substring(libelle_journal FOR 24) as libelle_journal, > substring(coalesce(id_facture, ' ') FOR 14) as id_facture, > substring(coalesce(id_paiement, ' ') FOR 14) as id_paiement, > substring(coalesce(libelle, ' ') FOR 34) as libelle, > debit/100::numeric as debit, credit/100::numeric as credit, lettrage, > pointage, 0 as lettrage_check, to_char(sum(debit/100::numeric) over > (PARTITION BY numero_compte), '999G999G999G990D00') as total_debit, > to_char(sum(credit/100::numeric) over (PARTITION BY numero_compte), > '999G999G999G990D00') as total_credit, > to_char(sum((credit-debit)/100::numeric) over (PARTITION BY numero_compte > ORDER BY date_ecriture, id_line), '999G999G999G990D00') as solde, > to_char(sum(debit/100::numeric) over (), '999G999G999G990D00') as > grand_total_debit, to_char(sum(credit/100::numeric) over (), > '999G999G999G990D00') as grand_total_credit, count(*) over () as lines, > coalesce(libelle_section, '') as libelle_section, row_number() over (ORDE= R > BY numero_compte, date_ecriture, id_line) as row_number > FROM tbljournal > WHERE id_client =3D $1 and fiscal_year =3D $2 > ORDER BY numero_compte, date_ecriture, id_line > ) > SELECT t1.numero_compte, regexp_replace(t2.libelle_compte, '\s', > ' ', 'g') as libelle_compte, id_entry, id_line, date_ecriture, > libelle_journal, coalesce(id_facture, ' ') as id_facture, > coalesce(id_paiement, ' ') as id_paiement, coalesce(libelle, ' = ') > as libelle, to_char(debit, '999G999G999G990D00') as debit, to_char(credit= , > '999G999G999G990D00') as credit, lettrage_check, pointage, total_debit, > total_credit, solde, grand_total_debit, grand_total_credit, > libelle_section, lettrage, lines > FROM t1 INNER JOIN tblcompte t2 using (id_client, fiscal_year, > numero_compte) > WHERE row_number > 2000 AND row_number < 3001 > > ORDER BY row_number > > > Sort (cost=3D3705.52..3706.69 rows=3D469 width=3D458) (actual > time=3D872.263..872.511 rows=3D1000 loops=3D1) > Sort Key: t1.row_number > Sort Method: quicksort Memory: 384kB > Buffers: shared hit=3D3577 > -> Hash Join (cost=3D363.42..3684.71 rows=3D469 width=3D458) = (actual > time=3D582.015..867.062 rows=3D1000 loops=3D1) > Hash Cond: ((t1.id_client =3D t2.id_client) AND > (t1.fiscal_year =3D t2.fiscal_year) AND (t1.numero_compte =3D t2.numero_c= ompte)) > Buffers: shared hit=3D3574 > -> Subquery Scan on t1 (cost=3D1.66..3293.96 rows=3D323= 4 > width=3D434) (actual time=3D564.122..819.731 rows=3D1000 loops=3D1) > Filter: (t1.row_number > 2000) > Rows Removed by Filter: 2000 > Buffers: shared hit=3D3486 > -> WindowAgg (cost=3D1.66..3172.67 rows=3D9703 > width=3D434) (actual time=3D529.975..817.859 rows=3D3000 loops=3D1) > Filter: ((row_number() OVER (?)) < 3001) > Rows Removed by Filter: 15188 > Buffers: shared hit=3D3486 > -> WindowAgg (cost=3D1.66..2590.49 rows=3D9= 703 > width=3D223) (actual time=3D0.696..436.937 rows=3D18188 loops=3D1) > Buffers: shared hit=3D3486 > -> WindowAgg (cost=3D1.66..2323.66 > rows=3D9703 width=3D159) (actual time=3D0.652..315.506 rows=3D18188 loops= =3D1) > Run Condition: (row_number() OVER > (?) < 3001) > Buffers: shared hit=3D3486 > -> WindowAgg (cost=3D1.66..2129= .60 > rows=3D9703 width=3D151) (actual time=3D0.547..242.007 rows=3D18188 loops= =3D1) > Buffers: shared hit=3D3486 > -> Incremental Sort > (cost=3D1.66..1862.77 rows=3D9703 width=3D119) (actual time=3D0.519..94.8= 24 > rows=3D18188 loops=3D1) > Sort Key: > tbljournal.numero_compte, tbljournal.date_ecriture, tbljournal.id_line > Presorted Key: > tbljournal.numero_compte > Full-sort Groups: 44 > Sort Method: quicksort Average Memory: 28kB Peak Memory: 28kB > Pre-sorted Groups: 51 > Sort Method: quicksort Average Memory: 535kB Peak Memory: 844 > kB > Buffers: shared > hit=3D3486 > -> Index Scan using > tbljournal_client_year_compte_idx on tbljournal (cost=3D0.29..1446.57 > rows=3D9703 width=3D119) (actual time=3D0.098..36.042 rows=3D18188 loops= =3D1) > Index Cond: > ((id_client =3D 2739) AND (fiscal_year =3D 2024)) > Buffers: shared > hit=3D3477 > -> Hash (cost=3D187.55..187.55 rows=3D9955 width=3D36) = (actual > time=3D17.560..17.563 rows=3D9955 loops=3D1) > Buckets: 16384 Batches: 1 Memory Usage: 813kB > Buffers: shared hit=3D88 > -> Seq Scan on tblcompte t2 (cost=3D0.00..187.55 > rows=3D9955 width=3D36) (actual time=3D0.048..6.363 rows=3D9955 loops=3D1= ) > Buffers: shared hit=3D88 > > > #PostreSQL Settings > name | current_setting | source > -------------------------------+--------------------+-------------------- > application_name | psql | client > auto_explain.log_analyze | on | configuration file > auto_explain.log_buffers | on | configuration file > auto_explain.log_min_duration | 20ms | configuration file > client_encoding | UTF8 | client > cluster_name | 15/main | configuration file > DateStyle | ISO, DMY | configuration file > default_text_search_config | pg_catalog.english | configuration file > dynamic_shared_memory_type | posix | configuration file > lc_messages | C.UTF-8 | configuration file > lc_monetary | C.UTF-8 | configuration file > lc_numeric | fr_FR.UTF-8 | database > lc_time | fr_FR.UTF-8 | database > log_line_prefix | %m [%p] %q%u@%d | configuration file > log_timezone | Europe/Paris | configuration file > max_connections | 150 | configuration file > max_wal_size | 1GB | configuration file > min_wal_size | 80MB | configuration file > port | 5432 | configuration file > random_page_cost | 1.1 | configuration file > shared_buffers | 128MB | configuration file > ssl | off | configuration file > TimeZone | Europe/Paris | configuration file > (23 rows) > > ######################## > Table's schema > ######################## > Table "public.tbljournal" > Column | Type | Collation | Nullable | > Default > > -----------------+---------+-----------+----------+----------------------= ----------------------- > date_ecriture | date | | not null | > id_facture | text | | | > libelle | text | | | > debit | integer | | not null | 0 > credit | integer | | not null | 0 > lettrage | text | | | > id_line | integer | | not null | > nextval('tbljournal_id_line_seq'::regclass) > id_entry | integer | | not null | > id_paiement | text | | | > numero_compte | text | | not null | > fiscal_year | integer | | not null | > id_client | integer | | not null | > libelle_journal | text | | not null | > id_export | integer | | | > pointage | boolean | | not null | false > date_validation | date | | not null | 'now'::text::date > libelle_section | text | | | > Indexes: > "tbljournal_id_line" PRIMARY KEY, btree (id_line) > "tblexport_id_client_idx" btree (id_client) > "tblexport_id_export_idx" btree (id_export) > "tbljournal_client_year_compte_idx" btree (id_client, fiscal_year, > numero_compte) > "tbljournal_client_year_libelle_journal_idx" btree (id_client, > fiscal_year, libelle_journal) > "tbljournal_id_entry_idx" btree (id_entry) > Check constraints: > "tbljournal_id_entry_not_o" CHECK (id_entry > 0) > Foreign-key constraints: > "tbljournal_client_year_libelle_journal_fk" FOREIGN KEY (id_client, > fiscal_year, libelle_journal) REFERENCES tbljournal_liste(id_client, > fiscal_year, libelle_journal) ON UPDATE CASCADE > "tbljournal_client_year_libelle_section_fk" FOREIGN KEY (id_client, > fiscal_year, libelle_section) REFERENCES tblanalytics(id_client, > fiscal_year, libelle_section) ON UPDATE CASCADE > "tbljournal_client_year_numero_compte_fk" FOREIGN KEY (id_client, > fiscal_year, numero_compte) REFERENCES tblcompte(id_client, fiscal_year, > numero_compte) ON UPDATE CASCADE > "tbljournal_id_client_fkey" FOREIGN KEY (id_client) REFERENCES > compta_client(id_client) > "tbljournal_id_export_fk" FOREIGN KEY (id_export) REFERENCES > tblexport(id_export) ON UPDATE CASCADE > Triggers: > check_month_is_archived BEFORE INSERT OR DELETE ON tbljournal FOR EAC= H > ROW EXECUTE FUNCTION tbljournal_check_month_is_archived() > > > > > > -- > Bien =C3=A0 vous, Vincent Veyron > > https://compta.libremen.com > Logiciel libre de comptabilit=C3=A9 g=C3=A9n=C3=A9rale et analytique en p= artie double > > > --000000000000cbf1c5064524dad8 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdj5IaTwvZGl2Pjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSBn bWFpbF9xdW90ZV9jb250YWluZXIiPjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9hdHRyIj7E jXQgNC4gMTIuIDIwMjUgdsKgMTk6NDYgb2Rlc8OtbGF0ZWwgVmluY2VudCBWZXlyb24gJmx0Ozxh IGhyZWY9Im1haWx0bzp2di5saXN0c0B3YW5hZG9vLmZyIj52di5saXN0c0B3YW5hZG9vLmZyPC9h PiZndDsgbmFwc2FsOjxicj48L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0 eWxlPSJtYXJnaW46MHB4IDBweCAwcHggMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYigy MDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+SGksPGJyPg0KPGJyPg0KVXNpbmcgdGhlIHNh bWUgcXVlcnksIHdpdGggdGhlIHNhbWUgZGF0YWJhc2Ugb24gYm90aCBtYWNoaW5lLCBwbGFucyBh bmQgZXN0aW1hdGVzIGFyZSBxdWFzaSBpZGVudGljYWwsIGJ1dCBhY3R1YWwgY29zdCBpcyBtdWx0 aXBsaWVkIGJ5IHRocmVlIG9uIG15IHNlcnZlciBjb21wYXJlZCB0byBteSB3b3Jrc3RhdGlvbiwg Zm9yIGFsbCBub2RlcyBpbiB0aGUgcGxhbi4gQ2FuIHlvdSB0ZWxsIG1lIHdoYXQgZXhwbGFpbnMg dGhlIGRpZmZlcmVuY2U/IDxicj4NCjxicj4NCkkgd29yayB3aXRoIFBvc3RncmVTUUwgMTUuMTQg b24gRGViaWFuIE9sZCBTdGFibGUgKGJvb2t3b3JtKS48YnI+DQo8YnI+DQpNeSB3b3Jrc3RhdGlv biBpcyBhIExlbm92byBYMjUwIHdpdGggOEdCIFJBTSBhbmQgYW4gSW50ZWwoUikgQ29yZShUTSkg aTUtNTMwMFUgQ1BVIEAgMi4zMEdIeiAoNCBjb3Jlcyk8YnI+DQpjcHUgTUh6wqAgwqAgwqAgwqAg wqA6IDUwMC4wMDA8YnI+DQpjYWNoZSBzaXplwqAgwqAgwqAgOiAzMDcyIEtCPGJyPg0KPGJyPg0K TXkgc2VydmVyIGlzIGEgU3RhcnQtMy1TLVNTRCBzZXJ2ZXIgZnJvbSA8YSBocmVmPSJodHRwOi8v b25saW5lLm5ldCIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+b25saW5lLm5ldDwv YT4gd2l0aCA0IEdCIFJBTSBhbmQgYW4gSW50ZWwoUikgQXRvbShUTSkgQ1BVwqAgQzIzMzjCoCBA IDEuNzRHSHogKDIgY29yZXMpPGJyPg0KY3B1IE1IesKgIMKgIMKgIMKgIMKgOiAxMTk4LjgyMDxi cj4NCmNhY2hlIHNpemXCoCDCoCDCoCA6IDEwMjQgS0I8YnI+PC9ibG9ja3F1b3RlPjxkaXY+PGJy PjwvZGl2PjxkaXY+SW50ZWwgQXRvbSBpcyBzbG93IENQVTwvZGl2PjxkaXY+PGJyPjwvZGl2Pjxk aXY+PGEgaHJlZj0iaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW50ZWxfQXRvbSI+aHR0 cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW50ZWxfQXRvbTwvYT48L2Rpdj48ZGl2Pjxicj48 L2Rpdj48ZGl2PlJlZ2FyZHM8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlBhdmVsPC9kaXY+PGRp dj7CoDwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjow cHggMHB4IDBweCAwLjhleDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtw YWRkaW5nLWxlZnQ6MWV4Ij4NCjxicj4NClRoZSBxdWVyeSBzZWxlY3RzIH4gMTggMDAwIHJvd3Mg b3V0IG9mIH4gMTAwIDAwMCBpbiB0YWJsZSAmIzM5O3RibGpvdXJuYWwmIzM5OywgY2FsY3VsdGF0 ZXMgc2V2ZXJhbCB3aW5kb3cgZnVuY3Rpb25zIG9uIHRoZSByZXN1bHRzLCB0aGVuIGpvaW5zIHRv IGFub3RoZXIgc21hbGwgdGFibGUgKDEwIDAwMCByb3dzKS48YnI+DQo8YnI+DQpCZWxvdyB0aGUg dHdvIHBsYW5zLCBmb2xsb3dlZCBieSBub24tc3RhbmRhcmQgc2V0dGluZ3MgaW4gcG9zdGdyZXNx bC5jb25mICh0aGV5IGFyZSBpZGVudGljYWwgb24gYm90aCBtYWNoaW5lcyksIGFuZCB0aGUgdGFi bGUmIzM5O3Mgc2NoZW1hIGF0IHRoZSBib3R0b20uPGJyPg0KPGJyPg0KIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjPGJyPg0KRXhwbGFpbiBhbmFseXplIG9uIHRoZSB3b3Jrc3RhdGlvbjxi cj4NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIzxicj4NCjxicj4NCjIwMjUtMTItMDQg MTc6MDk6MjguMTMzIENFVCBbMTQ1NzZdIHd3dy1kYXRhQGNvbXB0YSBMT0c6wqAgZHVyYXRpb246 IDIxMC4wMDQgbXPCoCBwbGFuOjxicj4NCsKgIMKgIMKgIMKgIFF1ZXJ5IFRleHQ6IDxicj4NCsKg IMKgIMKgIMKgIFdJVEggdDEgQVMgTk9UIE1BVEVSSUFMSVpFRCAoPGJyPg0KwqAgwqAgwqAgwqAg U0VMRUNUIGlkX2NsaWVudCwgZmlzY2FsX3llYXIsIG51bWVyb19jb21wdGUsIGlkX2VudHJ5LCBp ZF9saW5lLCBkYXRlX2Vjcml0dXJlLCBzdWJzdHJpbmcobGliZWxsZV9qb3VybmFsIEZPUiAyNCkg YXMgbGliZWxsZV9qb3VybmFsLCBzdWJzdHJpbmcoY29hbGVzY2UoaWRfZmFjdHVyZSwgJiMzOTsm YW1wO25ic3A7JiMzOTspIEZPUiAxNCkgYXMgaWRfZmFjdHVyZSwgc3Vic3RyaW5nKGNvYWxlc2Nl KGlkX3BhaWVtZW50LCAmIzM5OyZhbXA7bmJzcDsmIzM5OykgRk9SIDE0KSBhcyBpZF9wYWllbWVu dCwgc3Vic3RyaW5nKGNvYWxlc2NlKGxpYmVsbGUsICYjMzk7JmFtcDtuYnNwOyYjMzk7KSBGT1Ig MzQpIGFzIGxpYmVsbGUsIGRlYml0LzEwMDo6bnVtZXJpYyBhcyBkZWJpdCwgY3JlZGl0LzEwMDo6 bnVtZXJpYyBhcyBjcmVkaXQsIGxldHRyYWdlLCBwb2ludGFnZSwgMCBhcyBsZXR0cmFnZV9jaGVj aywgdG9fY2hhcihzdW0oZGViaXQvMTAwOjpudW1lcmljKSBvdmVyIChQQVJUSVRJT04gQlkgbnVt ZXJvX2NvbXB0ZSksICYjMzk7OTk5Rzk5OUc5OTlHOTkwRDAwJiMzOTspIGFzIHRvdGFsX2RlYml0 LCB0b19jaGFyKHN1bShjcmVkaXQvMTAwOjpudW1lcmljKSBvdmVyIChQQVJUSVRJT04gQlkgbnVt ZXJvX2NvbXB0ZSksICYjMzk7OTk5Rzk5OUc5OTlHOTkwRDAwJiMzOTspIGFzIHRvdGFsX2NyZWRp dCwgdG9fY2hhcihzdW0oKGNyZWRpdC1kZWJpdCkvMTAwOjpudW1lcmljKSBvdmVyIChQQVJUSVRJ T04gQlkgbnVtZXJvX2NvbXB0ZSBPUkRFUiBCWSBkYXRlX2Vjcml0dXJlLCBpZF9saW5lKSwgJiMz OTs5OTlHOTk5Rzk5OUc5OTBEMDAmIzM5OykgYXMgc29sZGUsIHRvX2NoYXIoc3VtKGRlYml0LzEw MDo6bnVtZXJpYykgb3ZlciAoKSwgJiMzOTs5OTlHOTk5Rzk5OUc5OTBEMDAmIzM5OykgYXMgZ3Jh bmRfdG90YWxfZGViaXQsIHRvX2NoYXIoc3VtKGNyZWRpdC8xMDA6Om51bWVyaWMpIG92ZXIgKCks ICYjMzk7OTk5Rzk5OUc5OTlHOTkwRDAwJiMzOTspIGFzIGdyYW5kX3RvdGFsX2NyZWRpdCwgY291 bnQoKikgb3ZlciAoKSBhcyBsaW5lcywgY29hbGVzY2UobGliZWxsZV9zZWN0aW9uLCAmIzM5OyYj Mzk7KSBhcyBsaWJlbGxlX3NlY3Rpb24sIHJvd19udW1iZXIoKSBvdmVyIChPUkRFUiBCWSBudW1l cm9fY29tcHRlLCBkYXRlX2Vjcml0dXJlLCBpZF9saW5lKSBhcyByb3dfbnVtYmVyPGJyPg0KwqAg wqAgwqAgwqAgRlJPTSB0Ymxqb3VybmFsPGJyPg0KwqAgwqAgwqAgwqAgV0hFUkUgaWRfY2xpZW50 ID0gJDEgYW5kIGZpc2NhbF95ZWFyID0gJDLCoCA8YnI+DQrCoCDCoCDCoCDCoCBPUkRFUiBCWSBu dW1lcm9fY29tcHRlLCBkYXRlX2Vjcml0dXJlLCBpZF9saW5lIDxicj4NCsKgIMKgIMKgIMKgICkg PGJyPg0KwqAgwqAgwqAgwqAgU0VMRUNUIHQxLm51bWVyb19jb21wdGUsIHJlZ2V4cF9yZXBsYWNl KHQyLmxpYmVsbGVfY29tcHRlLCAmIzM5O1xzJiMzOTssICYjMzk7JmFtcDtuYnNwOyYjMzk7LCAm IzM5O2cmIzM5OykgYXMgbGliZWxsZV9jb21wdGUsIGlkX2VudHJ5LCBpZF9saW5lLCBkYXRlX2Vj cml0dXJlLCBsaWJlbGxlX2pvdXJuYWwsIGNvYWxlc2NlKGlkX2ZhY3R1cmUsICYjMzk7JmFtcDtu YnNwOyYjMzk7KSBhcyBpZF9mYWN0dXJlLCBjb2FsZXNjZShpZF9wYWllbWVudCwgJiMzOTsmYW1w O25ic3A7JiMzOTspIGFzIGlkX3BhaWVtZW50LCBjb2FsZXNjZShsaWJlbGxlLCAmIzM5OyZhbXA7 bmJzcDsmIzM5OykgYXMgbGliZWxsZSwgdG9fY2hhcihkZWJpdCwgJiMzOTs5OTlHOTk5Rzk5OUc5 OTBEMDAmIzM5OykgYXMgZGViaXQsIHRvX2NoYXIoY3JlZGl0LCAmIzM5Ozk5OUc5OTlHOTk5Rzk5 MEQwMCYjMzk7KSBhcyBjcmVkaXQsIGxldHRyYWdlX2NoZWNrLCBwb2ludGFnZSwgdG90YWxfZGVi aXQsIHRvdGFsX2NyZWRpdCwgc29sZGUsIGdyYW5kX3RvdGFsX2RlYml0LCBncmFuZF90b3RhbF9j cmVkaXQsIGxpYmVsbGVfc2VjdGlvbiwgbGV0dHJhZ2UsIGxpbmVzPGJyPg0KwqAgwqAgwqAgwqAg RlJPTSB0MSBJTk5FUiBKT0lOIHRibGNvbXB0ZSB0MiB1c2luZyAoaWRfY2xpZW50LCBmaXNjYWxf eWVhciwgbnVtZXJvX2NvbXB0ZSk8YnI+DQrCoCDCoCDCoCDCoCBXSEVSRSByb3dfbnVtYmVyICZn dDsgMjAwMCBBTkQgcm93X251bWJlciAmbHQ7IDMwMDE8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBP UkRFUiBCWSByb3dfbnVtYmVyPGJyPg0KPGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgU29ydMKgIChj b3N0PTM5MjUuMzUuLjM5MjYuNjAgcm93cz01MDEgd2lkdGg9NDU4KSAoYWN0dWFsIHRpbWU9MjA4 LjA2MS4uMjA4LjE0MiByb3dzPTEwMDAgbG9vcHM9MSk8YnI+DQrCoCDCoCDCoCDCoCDCoCBTb3J0 IEtleTogdDEucm93X251bWJlcjxicj4NCsKgIMKgIMKgIMKgIMKgIFNvcnQgTWV0aG9kOiBxdWlj a3NvcnTCoCBNZW1vcnk6IDM4NGtCPGJyPg0KwqAgwqAgwqAgwqAgwqAgQnVmZmVyczogc2hhcmVk IGhpdD0zNTY1LCB0ZW1wIHJlYWQ9MzQxIHdyaXR0ZW49Mjk4PGJyPg0KwqAgwqAgwqAgwqAgwqAg LSZndDvCoCBIYXNoIEpvaW7CoCAoY29zdD0zNTIuOTUuLjM5MDIuODggcm93cz01MDEgd2lkdGg9 NDU4KSAoYWN0dWFsIHRpbWU9MTM3Ljc3MS4uMjA2Ljk3OSByb3dzPTEwMDAgbG9vcHM9MSk8YnI+ DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBIYXNoIENvbmQ6ICgodDEuaWRfY2xpZW50ID0gdDIu aWRfY2xpZW50KSBBTkQgKHQxLmZpc2NhbF95ZWFyID0gdDIuZmlzY2FsX3llYXIpIEFORCAodDEu bnVtZXJvX2NvbXB0ZSA9IHQyLm51bWVyb19jb21wdGUpKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9MzU2NSwgdGVtcCByZWFkPTM0MSB3cml0dGVuPTI5 ODxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC0mZ3Q7wqAgU3VicXVlcnkgU2NhbiBvbiB0 McKgIChjb3N0PTEuNzUuLjM1MjAuNDkgcm93cz0zNDg0IHdpZHRoPTQzNCkgKGFjdHVhbCB0aW1l PTEzMi4xMDkuLjE5NS4wOTYgcm93cz0xMDAwIGxvb3BzPTEpPGJyPg0KwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgRmlsdGVyOiAodDEucm93X251bWJlciAmZ3Q7IDIwMDApPGJyPg0K wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgUm93cyBSZW1vdmVkIGJ5IEZpbHRlcjog MjAwMDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEJ1ZmZlcnM6IHNoYXJl ZCBoaXQ9MzQ4MCwgdGVtcCByZWFkPTM0MSB3cml0dGVuPTI5ODxicj4NCsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIC0mZ3Q7wqAgV2luZG93QWdnwqAgKGNvc3Q9MS43NS4uMzM4OS44 NCByb3dzPTEwNDUyIHdpZHRoPTQzNCkgKGFjdHVhbCB0aW1lPTEyMy4xMjUuLjE5NC43MDIgcm93 cz0zMDAwIGxvb3BzPTEpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgRmlsdGVyOiAoKHJvd19udW1iZXIoKSBPVkVSICg/KSkgJmx0OyAzMDAxKTxicj4NCsKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFJvd3MgUmVtb3ZlZCBieSBG aWx0ZXI6IDE1MTg4PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgQnVmZmVyczogc2hhcmVkIGhpdD0zNDgwLCB0ZW1wIHJlYWQ9MzQxIHdyaXR0ZW49Mjk4PGJy Pg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSZndDvCoCBXaW5k b3dBZ2fCoCAoY29zdD0xLjc1Li4yNzYyLjcyIHJvd3M9MTA0NTIgd2lkdGg9MjIzKSAoYWN0dWFs IHRpbWU9MC4xMjIuLjk2LjY4NSByb3dzPTE4MTg4IGxvb3BzPTEpPGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQnVmZmVyczogc2hhcmVkIGhp dD0zNDgwPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgLSZndDvCoCBXaW5kb3dBZ2fCoCAoY29zdD0xLjc1Li4yNDc1LjI5IHJvd3M9MTA0NTIg d2lkdGg9MTU5KSAoYWN0dWFsIHRpbWU9MC4xMTMuLjcwLjY0NCByb3dzPTE4MTg4IGxvb3BzPTEp PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgUnVuIENvbmRpdGlvbjogKHJvd19udW1iZXIoKSBPVkVSICg/KSAmbHQ7IDMwMDEp PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgQnVmZmVyczogc2hhcmVkIGhpdD0zNDgwPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSZndDvCoCBXaW5kb3dB Z2fCoCAoY29zdD0xLjc1Li4yMjY2LjI1IHJvd3M9MTA0NTIgd2lkdGg9MTUxKSAoYWN0dWFsIHRp bWU9MC4xMDMuLjU1LjkwMSByb3dzPTE4MTg4IGxvb3BzPTEpPGJyPg0KwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQnVm ZmVyczogc2hhcmVkIGhpdD0zNDgwPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSZndDvCoCBJbmNyZW1lbnRh bCBTb3J0wqAgKGNvc3Q9MS43NS4uMTk3OC44MiByb3dzPTEwNDUyIHdpZHRoPTExOSkgKGFjdHVh bCB0aW1lPTAuMDg5Li4yNy43MDggcm93cz0xODE4OCBsb29wcz0xKTxicj4NCsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIFNvcnQgS2V5OiB0Ymxqb3VybmFsLm51bWVyb19jb21wdGUsIHRibGpvdXJuYWwu ZGF0ZV9lY3JpdHVyZSwgdGJsam91cm5hbC5pZF9saW5lPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgUHJlc29ydGVkIEtleTogdGJsam91cm5hbC5udW1lcm9fY29tcHRlPGJyPg0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgRnVsbC1zb3J0IEdyb3VwczogNDTCoCBTb3J0IE1ldGhvZDogcXVpY2tzb3J0 wqAgQXZlcmFnZSBNZW1vcnk6IDI4a0LCoCBQZWFrIE1lbW9yeTogMjhrQjxicj4NCsKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIFByZS1zb3J0ZWQgR3JvdXBzOiA1McKgIFNvcnQgTWV0aG9kOiBxdWlja3Nv cnTCoCBBdmVyYWdlIE1lbW9yeTogNTM1a0LCoCBQZWFrIE1lbW9yeTogODQ0a0I8YnI+DQrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBCdWZmZXJzOiBzaGFyZWQgaGl0PTM0ODA8YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCAtJmd0O8KgIEluZGV4IFNjYW4gdXNpbmcgdGJsam91cm5hbF9jbGllbnRfeWVh cl9jb21wdGVfaWR4IG9uIHRibGpvdXJuYWzCoCAoY29zdD0wLjI5Li4xNTIzLjM3IHJvd3M9MTA0 NTIgd2lkdGg9MTE5KSAoYWN0dWFsIHRpbWU9MC4wMjMuLjExLjMzMSByb3dzPTE4MTg4IGxvb3Bz PTEpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgSW5kZXggQ29uZDogKChpZF9j bGllbnQgPSAyNzM5KSBBTkQgKGZpc2NhbF95ZWFyID0gMjAyNCkpPGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgQnVmZmVyczogc2hhcmVkIGhpdD0zNDgwPGJyPg0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgLSZndDvCoCBIYXNowqAgKGNvc3Q9MTgxLjgwLi4xODEuODAgcm93cz05 NjgwIHdpZHRoPTM2KSAoYWN0dWFsIHRpbWU9NS42MTYuLjUuNjE3IHJvd3M9OTY4MCBsb29wcz0x KTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEJ1Y2tldHM6IDE2Mzg0wqAg QmF0Y2hlczogMcKgIE1lbW9yeSBVc2FnZTogNzk0a0I8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBCdWZmZXJzOiBzaGFyZWQgaGl0PTg1PGJyPg0KwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgLSZndDvCoCBTZXEgU2NhbiBvbiB0Ymxjb21wdGUgdDLCoCAoY29z dD0wLjAwLi4xODEuODAgcm93cz05NjgwIHdpZHRoPTM2KSAoYWN0dWFsIHRpbWU9MC4wMTguLjEu ODg4IHJvd3M9OTY4MCBsb29wcz0xKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9ODU8YnI+DQo8YnI+DQojIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyM8YnI+DQpFeHBsYWluIGFuYWx5emUgb24gdGhlIHNlcnZlcjxi cj4NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIzxicj4NCjxicj4NCjIwMjUtMTItMDQg MTc6MzM6MDAuODcwIENFVCBbNTM2MzkzXSB3d3ctZGF0YUBjb21wdGEgTE9HOsKgIGR1cmF0aW9u OiA4NzkuNjg2IG1zwqAgcGxhbjo8YnI+DQrCoCDCoCDCoCDCoCBRdWVyeSBUZXh0OiA8YnI+DQrC oCDCoCDCoCDCoCBXSVRIIHQxIEFTIE5PVCBNQVRFUklBTElaRUQgKDxicj4NCsKgIMKgIMKgIMKg IFNFTEVDVCBpZF9jbGllbnQsIGZpc2NhbF95ZWFyLCBudW1lcm9fY29tcHRlLCBpZF9lbnRyeSwg aWRfbGluZSwgZGF0ZV9lY3JpdHVyZSwgc3Vic3RyaW5nKGxpYmVsbGVfam91cm5hbCBGT1IgMjQp IGFzIGxpYmVsbGVfam91cm5hbCwgc3Vic3RyaW5nKGNvYWxlc2NlKGlkX2ZhY3R1cmUsICYjMzk7 JmFtcDtuYnNwOyYjMzk7KSBGT1IgMTQpIGFzIGlkX2ZhY3R1cmUsIHN1YnN0cmluZyhjb2FsZXNj ZShpZF9wYWllbWVudCwgJiMzOTsmYW1wO25ic3A7JiMzOTspIEZPUiAxNCkgYXMgaWRfcGFpZW1l bnQsIHN1YnN0cmluZyhjb2FsZXNjZShsaWJlbGxlLCAmIzM5OyZhbXA7bmJzcDsmIzM5OykgRk9S IDM0KSBhcyBsaWJlbGxlLCBkZWJpdC8xMDA6Om51bWVyaWMgYXMgZGViaXQsIGNyZWRpdC8xMDA6 Om51bWVyaWMgYXMgY3JlZGl0LCBsZXR0cmFnZSwgcG9pbnRhZ2UsIDAgYXMgbGV0dHJhZ2VfY2hl Y2ssIHRvX2NoYXIoc3VtKGRlYml0LzEwMDo6bnVtZXJpYykgb3ZlciAoUEFSVElUSU9OIEJZIG51 bWVyb19jb21wdGUpLCAmIzM5Ozk5OUc5OTlHOTk5Rzk5MEQwMCYjMzk7KSBhcyB0b3RhbF9kZWJp dCwgdG9fY2hhcihzdW0oY3JlZGl0LzEwMDo6bnVtZXJpYykgb3ZlciAoUEFSVElUSU9OIEJZIG51 bWVyb19jb21wdGUpLCAmIzM5Ozk5OUc5OTlHOTk5Rzk5MEQwMCYjMzk7KSBhcyB0b3RhbF9jcmVk aXQsIHRvX2NoYXIoc3VtKChjcmVkaXQtZGViaXQpLzEwMDo6bnVtZXJpYykgb3ZlciAoUEFSVElU SU9OIEJZIG51bWVyb19jb21wdGUgT1JERVIgQlkgZGF0ZV9lY3JpdHVyZSwgaWRfbGluZSksICYj Mzk7OTk5Rzk5OUc5OTlHOTkwRDAwJiMzOTspIGFzIHNvbGRlLCB0b19jaGFyKHN1bShkZWJpdC8x MDA6Om51bWVyaWMpIG92ZXIgKCksICYjMzk7OTk5Rzk5OUc5OTlHOTkwRDAwJiMzOTspIGFzIGdy YW5kX3RvdGFsX2RlYml0LCB0b19jaGFyKHN1bShjcmVkaXQvMTAwOjpudW1lcmljKSBvdmVyICgp LCAmIzM5Ozk5OUc5OTlHOTk5Rzk5MEQwMCYjMzk7KSBhcyBncmFuZF90b3RhbF9jcmVkaXQsIGNv dW50KCopIG92ZXIgKCkgYXMgbGluZXMsIGNvYWxlc2NlKGxpYmVsbGVfc2VjdGlvbiwgJiMzOTsm IzM5OykgYXMgbGliZWxsZV9zZWN0aW9uLCByb3dfbnVtYmVyKCkgb3ZlciAoT1JERVIgQlkgbnVt ZXJvX2NvbXB0ZSwgZGF0ZV9lY3JpdHVyZSwgaWRfbGluZSkgYXMgcm93X251bWJlcjxicj4NCsKg IMKgIMKgIMKgIEZST00gdGJsam91cm5hbDxicj4NCsKgIMKgIMKgIMKgIFdIRVJFIGlkX2NsaWVu dCA9ICQxIGFuZCBmaXNjYWxfeWVhciA9ICQywqAgPGJyPg0KwqAgwqAgwqAgwqAgT1JERVIgQlkg bnVtZXJvX2NvbXB0ZSwgZGF0ZV9lY3JpdHVyZSwgaWRfbGluZSA8YnI+DQrCoCDCoCDCoCDCoCAp IDxicj4NCsKgIMKgIMKgIMKgIFNFTEVDVCB0MS5udW1lcm9fY29tcHRlLCByZWdleHBfcmVwbGFj ZSh0Mi5saWJlbGxlX2NvbXB0ZSwgJiMzOTtccyYjMzk7LCAmIzM5OyZhbXA7bmJzcDsmIzM5Oywg JiMzOTtnJiMzOTspIGFzIGxpYmVsbGVfY29tcHRlLCBpZF9lbnRyeSwgaWRfbGluZSwgZGF0ZV9l Y3JpdHVyZSwgbGliZWxsZV9qb3VybmFsLCBjb2FsZXNjZShpZF9mYWN0dXJlLCAmIzM5OyZhbXA7 bmJzcDsmIzM5OykgYXMgaWRfZmFjdHVyZSwgY29hbGVzY2UoaWRfcGFpZW1lbnQsICYjMzk7JmFt cDtuYnNwOyYjMzk7KSBhcyBpZF9wYWllbWVudCwgY29hbGVzY2UobGliZWxsZSwgJiMzOTsmYW1w O25ic3A7JiMzOTspIGFzIGxpYmVsbGUsIHRvX2NoYXIoZGViaXQsICYjMzk7OTk5Rzk5OUc5OTlH OTkwRDAwJiMzOTspIGFzIGRlYml0LCB0b19jaGFyKGNyZWRpdCwgJiMzOTs5OTlHOTk5Rzk5OUc5 OTBEMDAmIzM5OykgYXMgY3JlZGl0LCBsZXR0cmFnZV9jaGVjaywgcG9pbnRhZ2UsIHRvdGFsX2Rl Yml0LCB0b3RhbF9jcmVkaXQsIHNvbGRlLCBncmFuZF90b3RhbF9kZWJpdCwgZ3JhbmRfdG90YWxf Y3JlZGl0LCBsaWJlbGxlX3NlY3Rpb24sIGxldHRyYWdlLCBsaW5lczxicj4NCsKgIMKgIMKgIMKg IEZST00gdDEgSU5ORVIgSk9JTiB0Ymxjb21wdGUgdDIgdXNpbmcgKGlkX2NsaWVudCwgZmlzY2Fs X3llYXIsIG51bWVyb19jb21wdGUpPGJyPg0KwqAgwqAgwqAgwqAgV0hFUkUgcm93X251bWJlciAm Z3Q7IDIwMDAgQU5EIHJvd19udW1iZXIgJmx0OyAzMDAxPGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAg T1JERVIgQlkgcm93X251bWJlcjxicj4NCjxicj4NCjxicj4NCsKgIMKgIMKgIMKgIFNvcnTCoCAo Y29zdD0zNzA1LjUyLi4zNzA2LjY5IHJvd3M9NDY5IHdpZHRoPTQ1OCkgKGFjdHVhbCB0aW1lPTg3 Mi4yNjMuLjg3Mi41MTEgcm93cz0xMDAwIGxvb3BzPTEpPGJyPg0KwqAgwqAgwqAgwqAgwqAgU29y dCBLZXk6IHQxLnJvd19udW1iZXI8YnI+DQrCoCDCoCDCoCDCoCDCoCBTb3J0IE1ldGhvZDogcXVp Y2tzb3J0wqAgTWVtb3J5OiAzODRrQjxicj4NCsKgIMKgIMKgIMKgIMKgIEJ1ZmZlcnM6IHNoYXJl ZCBoaXQ9MzU3Nzxicj4NCsKgIMKgIMKgIMKgIMKgIC0mZ3Q7wqAgSGFzaCBKb2luwqAgKGNvc3Q9 MzYzLjQyLi4zNjg0LjcxIHJvd3M9NDY5IHdpZHRoPTQ1OCkgKGFjdHVhbCB0aW1lPTU4Mi4wMTUu Ljg2Ny4wNjIgcm93cz0xMDAwIGxvb3BzPTEpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg SGFzaCBDb25kOiAoKHQxLmlkX2NsaWVudCA9IHQyLmlkX2NsaWVudCkgQU5EICh0MS5maXNjYWxf eWVhciA9IHQyLmZpc2NhbF95ZWFyKSBBTkQgKHQxLm51bWVyb19jb21wdGUgPSB0Mi5udW1lcm9f Y29tcHRlKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBCdWZmZXJzOiBzaGFyZWQgaGl0 PTM1NzQ8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAtJmd0O8KgIFN1YnF1ZXJ5IFNjYW4g b24gdDHCoCAoY29zdD0xLjY2Li4zMjkzLjk2IHJvd3M9MzIzNCB3aWR0aD00MzQpIChhY3R1YWwg dGltZT01NjQuMTIyLi44MTkuNzMxIHJvd3M9MTAwMCBsb29wcz0xKTxicj4NCsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIEZpbHRlcjogKHQxLnJvd19udW1iZXIgJmd0OyAyMDAwKTxi cj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFJvd3MgUmVtb3ZlZCBieSBGaWx0 ZXI6IDIwMDA8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBCdWZmZXJzOiBz aGFyZWQgaGl0PTM0ODY8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAtJmd0 O8KgIFdpbmRvd0FnZ8KgIChjb3N0PTEuNjYuLjMxNzIuNjcgcm93cz05NzAzIHdpZHRoPTQzNCkg KGFjdHVhbCB0aW1lPTUyOS45NzUuLjgxNy44NTkgcm93cz0zMDAwIGxvb3BzPTEpPGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgRmlsdGVyOiAoKHJvd19udW1i ZXIoKSBPVkVSICg/KSkgJmx0OyAzMDAxKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIFJvd3MgUmVtb3ZlZCBieSBGaWx0ZXI6IDE1MTg4PGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQnVmZmVyczogc2hhcmVkIGhpdD0z NDg2PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSZndDvC oCBXaW5kb3dBZ2fCoCAoY29zdD0xLjY2Li4yNTkwLjQ5IHJvd3M9OTcwMyB3aWR0aD0yMjMpIChh Y3R1YWwgdGltZT0wLjY5Ni4uNDM2LjkzNyByb3dzPTE4MTg4IGxvb3BzPTEpPGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQnVmZmVyczogc2hh cmVkIGhpdD0zNDg2PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgLSZndDvCoCBXaW5kb3dBZ2fCoCAoY29zdD0xLjY2Li4yMzIzLjY2IHJvd3M9 OTcwMyB3aWR0aD0xNTkpIChhY3R1YWwgdGltZT0wLjY1Mi4uMzE1LjUwNiByb3dzPTE4MTg4IGxv b3BzPTEpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgUnVuIENvbmRpdGlvbjogKHJvd19udW1iZXIoKSBPVkVSICg/KSAmbHQ7 IDMwMDEpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgQnVmZmVyczogc2hhcmVkIGhpdD0zNDg2PGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSZndDvCoCBX aW5kb3dBZ2fCoCAoY29zdD0xLjY2Li4yMTI5LjYwIHJvd3M9OTcwMyB3aWR0aD0xNTEpIChhY3R1 YWwgdGltZT0wLjU0Ny4uMjQyLjAwNyByb3dzPTE4MTg4IGxvb3BzPTEpPGJyPg0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgQnVmZmVyczogc2hhcmVkIGhpdD0zNDg2PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSZndDvCoCBJbmNy ZW1lbnRhbCBTb3J0wqAgKGNvc3Q9MS42Ni4uMTg2Mi43NyByb3dzPTk3MDMgd2lkdGg9MTE5KSAo YWN0dWFsIHRpbWU9MC41MTkuLjk0LjgyNCByb3dzPTE4MTg4IGxvb3BzPTEpPGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgU29ydCBLZXk6IHRibGpvdXJuYWwubnVtZXJvX2NvbXB0ZSwgdGJsam91 cm5hbC5kYXRlX2Vjcml0dXJlLCB0Ymxqb3VybmFsLmlkX2xpbmU8YnI+DQrCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBQcmVzb3J0ZWQgS2V5OiB0Ymxqb3VybmFsLm51bWVyb19jb21wdGU8YnI+DQrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBGdWxsLXNvcnQgR3JvdXBzOiA0NMKgIFNvcnQgTWV0aG9kOiBxdWlj a3NvcnTCoCBBdmVyYWdlIE1lbW9yeTogMjhrQsKgIFBlYWsgTWVtb3J5OiAyOGtCPGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgUHJlLXNvcnRlZCBHcm91cHM6IDUxwqAgU29ydCBNZXRob2Q6IHF1 aWNrc29ydMKgIEF2ZXJhZ2UgTWVtb3J5OiA1MzVrQsKgIFBlYWsgTWVtb3J5OiA4NDQ8YnI+DQpr Qjxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9MzQ4Njxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIC0mZ3Q7wqAgSW5kZXggU2NhbiB1c2luZyB0Ymxqb3VybmFs X2NsaWVudF95ZWFyX2NvbXB0ZV9pZHggb24gdGJsam91cm5hbMKgIChjb3N0PTAuMjkuLjE0NDYu NTcgcm93cz05NzAzIHdpZHRoPTExOSkgKGFjdHVhbCB0aW1lPTAuMDk4Li4zNi4wNDIgcm93cz0x ODE4OCBsb29wcz0xKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEluZGV4IENv bmQ6ICgoaWRfY2xpZW50ID0gMjczOSkgQU5EIChmaXNjYWxfeWVhciA9IDIwMjQpKTxicj4NCsKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9MzQ3Nzxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC0mZ3Q7wqAgSGFzaMKgIChjb3N0PTE4Ny41NS4uMTg3 LjU1IHJvd3M9OTk1NSB3aWR0aD0zNikgKGFjdHVhbCB0aW1lPTE3LjU2MC4uMTcuNTYzIHJvd3M9 OTk1NSBsb29wcz0xKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEJ1Y2tl dHM6IDE2Mzg0wqAgQmF0Y2hlczogMcKgIE1lbW9yeSBVc2FnZTogODEza0I8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBCdWZmZXJzOiBzaGFyZWQgaGl0PTg4PGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLSZndDvCoCBTZXEgU2NhbiBvbiB0Ymxjb21w dGUgdDLCoCAoY29zdD0wLjAwLi4xODcuNTUgcm93cz05OTU1IHdpZHRoPTM2KSAoYWN0dWFsIHRp bWU9MC4wNDguLjYuMzYzIHJvd3M9OTk1NSBsb29wcz0xKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9ODg8YnI+DQo8YnI+ DQo8YnI+DQojUG9zdHJlU1FMIFNldHRpbmdzPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqBuYW1l wqAgwqAgwqAgwqAgwqAgwqAgwqAgfMKgIGN1cnJlbnRfc2V0dGluZ8KgIMKgfMKgIMKgIMKgIMKg c291cmNlwqAgwqAgwqAgwqA8YnI+DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tPGJyPg0KwqBhcHBsaWNhdGlv bl9uYW1lwqAgwqAgwqAgwqAgwqAgwqAgwqAgfCBwc3FswqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB8 IGNsaWVudDxicj4NCsKgYXV0b19leHBsYWluLmxvZ19hbmFseXplwqAgwqAgwqAgfCBvbsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgfCBjb25maWd1cmF0aW9uIGZpbGU8YnI+DQrCoGF1dG9fZXhw bGFpbi5sb2dfYnVmZmVyc8KgIMKgIMKgIHwgb27CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHwg Y29uZmlndXJhdGlvbiBmaWxlPGJyPg0KwqBhdXRvX2V4cGxhaW4ubG9nX21pbl9kdXJhdGlvbiB8 IDIwbXPCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHwgY29uZmlndXJhdGlvbiBmaWxlPGJyPg0KwqBj bGllbnRfZW5jb2RpbmfCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHwgVVRGOMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgfCBjbGllbnQ8YnI+DQrCoGNsdXN0ZXJfbmFtZcKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHwgMTUvbWFpbsKgIMKgIMKgIMKgIMKgIMKgIHwgY29uZmlndXJhdGlvbiBmaWxlPGJy Pg0KwqBEYXRlU3R5bGXCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHwgSVNPLCBETVnC oCDCoCDCoCDCoCDCoCDCoHwgY29uZmlndXJhdGlvbiBmaWxlPGJyPg0KwqBkZWZhdWx0X3RleHRf c2VhcmNoX2NvbmZpZ8KgIMKgIHwgcGdfY2F0YWxvZy5lbmdsaXNoIHwgY29uZmlndXJhdGlvbiBm aWxlPGJyPg0KwqBkeW5hbWljX3NoYXJlZF9tZW1vcnlfdHlwZcKgIMKgIHwgcG9zaXjCoCDCoCDC oCDCoCDCoCDCoCDCoCB8IGNvbmZpZ3VyYXRpb24gZmlsZTxicj4NCsKgbGNfbWVzc2FnZXPCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHwgQy5VVEYtOMKgIMKgIMKgIMKgIMKgIMKgIHwgY29u ZmlndXJhdGlvbiBmaWxlPGJyPg0KwqBsY19tb25ldGFyecKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgfCBDLlVURi04wqAgwqAgwqAgwqAgwqAgwqAgfCBjb25maWd1cmF0aW9uIGZpbGU8YnI+ DQrCoGxjX251bWVyaWPCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8IGZyX0ZSLlVURi04 wqAgwqAgwqAgwqAgfCBkYXRhYmFzZTxicj4NCsKgbGNfdGltZcKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgfCBmcl9GUi5VVEYtOMKgIMKgIMKgIMKgIHwgZGF0YWJhc2U8YnI+DQrC oGxvZ19saW5lX3ByZWZpeMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfCAlbSBbJXBdICVxJXVAJWTC oCDCoCB8IGNvbmZpZ3VyYXRpb24gZmlsZTxicj4NCsKgbG9nX3RpbWV6b25lwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgfCBFdXJvcGUvUGFyaXPCoCDCoCDCoCDCoHwgY29uZmlndXJhdGlvbiBm aWxlPGJyPg0KwqBtYXhfY29ubmVjdGlvbnPCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHwgMTUwwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgfCBjb25maWd1cmF0aW9uIGZpbGU8YnI+DQrCoG1heF93YWxf c2l6ZcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHwgMUdCwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgfCBjb25maWd1cmF0aW9uIGZpbGU8YnI+DQrCoG1pbl93YWxfc2l6ZcKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIHwgODBNQsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfCBjb25maWd1cmF0aW9u IGZpbGU8YnI+DQrCoHBvcnTCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8 IDU0MzLCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHwgY29uZmlndXJhdGlvbiBmaWxlPGJyPg0KwqBy YW5kb21fcGFnZV9jb3N0wqAgwqAgwqAgwqAgwqAgwqAgwqAgfCAxLjHCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCB8IGNvbmZpZ3VyYXRpb24gZmlsZTxicj4NCsKgc2hhcmVkX2J1ZmZlcnPCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCB8IDEyOE1CwqAgwqAgwqAgwqAgwqAgwqAgwqAgfCBjb25maWd1cmF0 aW9uIGZpbGU8YnI+DQrCoHNzbMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgfCBvZmbCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8IGNvbmZpZ3VyYXRpb24gZmlsZTxicj4N CsKgVGltZVpvbmXCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8IEV1cm9wZS9QYXJp c8KgIMKgIMKgIMKgfCBjb25maWd1cmF0aW9uIGZpbGU8YnI+DQooMjMgcm93cyk8YnI+DQo8YnI+ DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM8YnI+DQpUYWJsZSYjMzk7cyBzY2hlbWE8YnI+DQoj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFRhYmxlICZxdW90O3B1YmxpYy50Ymxqb3VybmFsJnF1 b3Q7PGJyPg0KwqAgwqAgwqBDb2x1bW7CoCDCoCDCoCB8wqAgVHlwZcKgIMKgfCBDb2xsYXRpb24g fCBOdWxsYWJsZSB8wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBEZWZhdWx0wqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqA8YnI+DQotLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS08YnI+DQrCoGRhdGVfZWNyaXR1cmXCoCDCoHwgZGF0ZcKgIMKgIHzCoCDCoCDCoCDC oCDCoCDCoHwgbm90IG51bGwgfCA8YnI+DQrCoGlkX2ZhY3R1cmXCoCDCoCDCoCB8IHRleHTCoCDC oCB8wqAgwqAgwqAgwqAgwqAgwqB8wqAgwqAgwqAgwqAgwqAgfCA8YnI+DQrCoGxpYmVsbGXCoCDC oCDCoCDCoCDCoHwgdGV4dMKgIMKgIHzCoCDCoCDCoCDCoCDCoCDCoHzCoCDCoCDCoCDCoCDCoCB8 IDxicj4NCsKgZGViaXTCoCDCoCDCoCDCoCDCoCDCoHwgaW50ZWdlciB8wqAgwqAgwqAgwqAgwqAg wqB8IG5vdCBudWxsIHwgMDxicj4NCsKgY3JlZGl0wqAgwqAgwqAgwqAgwqAgfCBpbnRlZ2VyIHzC oCDCoCDCoCDCoCDCoCDCoHwgbm90IG51bGwgfCAwPGJyPg0KwqBsZXR0cmFnZcKgIMKgIMKgIMKg IHwgdGV4dMKgIMKgIHzCoCDCoCDCoCDCoCDCoCDCoHzCoCDCoCDCoCDCoCDCoCB8IDxicj4NCsKg aWRfbGluZcKgIMKgIMKgIMKgIMKgfCBpbnRlZ2VyIHzCoCDCoCDCoCDCoCDCoCDCoHwgbm90IG51 bGwgfCBuZXh0dmFsKCYjMzk7dGJsam91cm5hbF9pZF9saW5lX3NlcSYjMzk7OjpyZWdjbGFzcyk8 YnI+DQrCoGlkX2VudHJ5wqAgwqAgwqAgwqAgfCBpbnRlZ2VyIHzCoCDCoCDCoCDCoCDCoCDCoHwg bm90IG51bGwgfCA8YnI+DQrCoGlkX3BhaWVtZW50wqAgwqAgwqB8IHRleHTCoCDCoCB8wqAgwqAg wqAgwqAgwqAgwqB8wqAgwqAgwqAgwqAgwqAgfCA8YnI+DQrCoG51bWVyb19jb21wdGXCoCDCoHwg dGV4dMKgIMKgIHzCoCDCoCDCoCDCoCDCoCDCoHwgbm90IG51bGwgfCA8YnI+DQrCoGZpc2NhbF95 ZWFywqAgwqAgwqB8IGludGVnZXIgfMKgIMKgIMKgIMKgIMKgIMKgfCBub3QgbnVsbCB8IDxicj4N CsKgaWRfY2xpZW50wqAgwqAgwqAgwqB8IGludGVnZXIgfMKgIMKgIMKgIMKgIMKgIMKgfCBub3Qg bnVsbCB8IDxicj4NCsKgbGliZWxsZV9qb3VybmFsIHwgdGV4dMKgIMKgIHzCoCDCoCDCoCDCoCDC oCDCoHwgbm90IG51bGwgfCA8YnI+DQrCoGlkX2V4cG9ydMKgIMKgIMKgIMKgfCBpbnRlZ2VyIHzC oCDCoCDCoCDCoCDCoCDCoHzCoCDCoCDCoCDCoCDCoCB8IDxicj4NCsKgcG9pbnRhZ2XCoCDCoCDC oCDCoCB8IGJvb2xlYW4gfMKgIMKgIMKgIMKgIMKgIMKgfCBub3QgbnVsbCB8IGZhbHNlPGJyPg0K wqBkYXRlX3ZhbGlkYXRpb24gfCBkYXRlwqAgwqAgfMKgIMKgIMKgIMKgIMKgIMKgfCBub3QgbnVs bCB8ICYjMzk7bm93JiMzOTs6OnRleHQ6OmRhdGU8YnI+DQrCoGxpYmVsbGVfc2VjdGlvbiB8IHRl eHTCoCDCoCB8wqAgwqAgwqAgwqAgwqAgwqB8wqAgwqAgwqAgwqAgwqAgfCA8YnI+DQpJbmRleGVz Ojxicj4NCsKgIMKgICZxdW90O3RibGpvdXJuYWxfaWRfbGluZSZxdW90OyBQUklNQVJZIEtFWSwg YnRyZWUgKGlkX2xpbmUpPGJyPg0KwqAgwqAgJnF1b3Q7dGJsZXhwb3J0X2lkX2NsaWVudF9pZHgm cXVvdDsgYnRyZWUgKGlkX2NsaWVudCk8YnI+DQrCoCDCoCAmcXVvdDt0YmxleHBvcnRfaWRfZXhw b3J0X2lkeCZxdW90OyBidHJlZSAoaWRfZXhwb3J0KTxicj4NCsKgIMKgICZxdW90O3RibGpvdXJu YWxfY2xpZW50X3llYXJfY29tcHRlX2lkeCZxdW90OyBidHJlZSAoaWRfY2xpZW50LCBmaXNjYWxf eWVhciwgbnVtZXJvX2NvbXB0ZSk8YnI+DQrCoCDCoCAmcXVvdDt0Ymxqb3VybmFsX2NsaWVudF95 ZWFyX2xpYmVsbGVfam91cm5hbF9pZHgmcXVvdDsgYnRyZWUgKGlkX2NsaWVudCwgZmlzY2FsX3ll YXIsIGxpYmVsbGVfam91cm5hbCk8YnI+DQrCoCDCoCAmcXVvdDt0Ymxqb3VybmFsX2lkX2VudHJ5 X2lkeCZxdW90OyBidHJlZSAoaWRfZW50cnkpPGJyPg0KQ2hlY2sgY29uc3RyYWludHM6PGJyPg0K wqAgwqAgJnF1b3Q7dGJsam91cm5hbF9pZF9lbnRyeV9ub3RfbyZxdW90OyBDSEVDSyAoaWRfZW50 cnkgJmd0OyAwKTxicj4NCkZvcmVpZ24ta2V5IGNvbnN0cmFpbnRzOjxicj4NCsKgIMKgICZxdW90 O3RibGpvdXJuYWxfY2xpZW50X3llYXJfbGliZWxsZV9qb3VybmFsX2ZrJnF1b3Q7IEZPUkVJR04g S0VZIChpZF9jbGllbnQsIGZpc2NhbF95ZWFyLCBsaWJlbGxlX2pvdXJuYWwpIFJFRkVSRU5DRVMg dGJsam91cm5hbF9saXN0ZShpZF9jbGllbnQsIGZpc2NhbF95ZWFyLCBsaWJlbGxlX2pvdXJuYWwp IE9OIFVQREFURSBDQVNDQURFPGJyPg0KwqAgwqAgJnF1b3Q7dGJsam91cm5hbF9jbGllbnRfeWVh cl9saWJlbGxlX3NlY3Rpb25fZmsmcXVvdDsgRk9SRUlHTiBLRVkgKGlkX2NsaWVudCwgZmlzY2Fs X3llYXIsIGxpYmVsbGVfc2VjdGlvbikgUkVGRVJFTkNFUyB0YmxhbmFseXRpY3MoaWRfY2xpZW50 LCBmaXNjYWxfeWVhciwgbGliZWxsZV9zZWN0aW9uKSBPTiBVUERBVEUgQ0FTQ0FERTxicj4NCsKg IMKgICZxdW90O3RibGpvdXJuYWxfY2xpZW50X3llYXJfbnVtZXJvX2NvbXB0ZV9mayZxdW90OyBG T1JFSUdOIEtFWSAoaWRfY2xpZW50LCBmaXNjYWxfeWVhciwgbnVtZXJvX2NvbXB0ZSkgUkVGRVJF TkNFUyB0Ymxjb21wdGUoaWRfY2xpZW50LCBmaXNjYWxfeWVhciwgbnVtZXJvX2NvbXB0ZSkgT04g VVBEQVRFIENBU0NBREU8YnI+DQrCoCDCoCAmcXVvdDt0Ymxqb3VybmFsX2lkX2NsaWVudF9ma2V5 JnF1b3Q7IEZPUkVJR04gS0VZIChpZF9jbGllbnQpIFJFRkVSRU5DRVMgY29tcHRhX2NsaWVudChp ZF9jbGllbnQpPGJyPg0KwqAgwqAgJnF1b3Q7dGJsam91cm5hbF9pZF9leHBvcnRfZmsmcXVvdDsg Rk9SRUlHTiBLRVkgKGlkX2V4cG9ydCkgUkVGRVJFTkNFUyB0YmxleHBvcnQoaWRfZXhwb3J0KSBP TiBVUERBVEUgQ0FTQ0FERTxicj4NClRyaWdnZXJzOjxicj4NCsKgIMKgIGNoZWNrX21vbnRoX2lz X2FyY2hpdmVkIEJFRk9SRSBJTlNFUlQgT1IgREVMRVRFIE9OIHRibGpvdXJuYWwgRk9SIEVBQ0gg Uk9XIEVYRUNVVEUgRlVOQ1RJT04gdGJsam91cm5hbF9jaGVja19tb250aF9pc19hcmNoaXZlZCgp PGJyPg0KPGJyPg0KPGJyPg0KPGJyPg0KPGJyPg0KPGJyPg0KLS0gPGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQmllbiDDoCB2 b3VzLCBWaW5jZW50IFZleXJvbiA8YnI+DQo8YnI+DQo8YSBocmVmPSJodHRwczovL2NvbXB0YS5s aWJyZW1lbi5jb20iIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vY29t cHRhLmxpYnJlbWVuLmNvbTwvYT48YnI+DQpMb2dpY2llbCBsaWJyZSBkZSBjb21wdGFiaWxpdMOp IGfDqW7DqXJhbGUgZXQgYW5hbHl0aXF1ZSBlbiBwYXJ0aWUgZG91YmxlPGJyPg0KPGJyPg0KPGJy Pg0KPC9ibG9ja3F1b3RlPjwvZGl2PjwvZGl2Pg0K --000000000000cbf1c5064524dad8--