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 1vhuVu-009fAH-1x for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Jan 2026 19:02:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vhuVt-00EOjx-2Z for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Jan 2026 19:02:10 +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 1vhuVX-00ELCS-1I for pgsql-hackers@lists.postgresql.org; Mon, 19 Jan 2026 19:01:47 +0000 Received: from mail-qt1-x82e.google.com ([2607:f8b0:4864:20::82e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vhuVV-001Nuz-21 for pgsql-hackers@lists.postgresql.org; Mon, 19 Jan 2026 19:01:47 +0000 Received: by mail-qt1-x82e.google.com with SMTP id d75a77b69052e-5014b5d8551so1018781cf.0 for ; Mon, 19 Jan 2026 11:01:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1768849304; cv=none; d=google.com; s=arc-20240605; b=YZPkVtPFYdcrvUpb8NW5rnV+3CydI5HoTB+A/Def9JBRFQlTW9ehJFkN7v17Zbu1ls w/gAjKDe3ZK9nXrETXFCTvJ7sFFzPD8XG2DP4FwvdbFRQGc5m0G6AWvdC/WYpeqqrOLF HsEj5oMy892J8dE0rJ2PYH9GO+iY/dkUwTLbsGbKaExkImUq2Cj0V8reRY3yUJD89zKD vxwTdmM9/0E9HG8dmkqlx50CcaqTRlipaTf+OMV9XFTyn4s0/Bl/hAdU3cVvNvtVBOsF tkYfxHsVs5RlqFEnOPWlveqxH4XqTnige7909gF2eje5KvmJ22KupdXgVgmgRwnfccbD Xm/A== 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=Fg4lQuSz2uMSZCTXRMENupFadUJJW3UP/sqjVDUlYQ8=; fh=NMJkvf9RRLpDT8wfZhOP15hDmLKhAjKvI+e4QmqDUfA=; b=P3aKqgYGNqfNdzbv/88vH7DtAzxiVvZ+bImeXZ4WvKUI/ayCgKugjxmSFQBj2+vyYJ yJdaY3AXF5K6/mr6aQM4EOvzIryhg46VjzL+iJcigiSZ4x11SJzMeDqUxwFuWVreGyd8 D9HAkVvGVSKQAzb3no1kt89R4kfcbeUc9E61q8XbsmkJizrxe7hx7ywjDunPflPeIstT JfR/zbCxvwUCfIi+W0tK7aB4Y4qD77qG8EfEWPHjFDeJm535Dary/EtsIfnpmPIUBsxX 1KpgBEzxGMYbDshj0BTwHYjYTExkQkeiBb8KBUwRK7udCDX5MrbDbF3IT/9fB93vZTyA LNBA==; 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=google.com; s=20230601; t=1768849304; x=1769454104; 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=Fg4lQuSz2uMSZCTXRMENupFadUJJW3UP/sqjVDUlYQ8=; b=ra1HgAY/jF2Frod6u1AW8CWkPTK9qIQdxhJMqbMEI4SvnbGF0zVGBItcU3fT4ioCQS pDP1BNBVSRaT+cD4MpdIQUM7Q99FKr3ce04N/KKBeGLgCsmzqd5sxpgcUkpo+iE+6OFj iiaweeeWAoTYr88FcjH4eyNpn85VkzroTeB5VySpe6RqRYJtduzI332hSdacGmlRShmD kJt+b/hdadCJ1nw/GzjhrRmzRrJUOKz8ChZz96t35pHx31pZuk5VsMsn6tQ1AxzNusLO tsuHWbv7G18LZfZ56KNTGTuQ4WYBBNnlqm5DUulwQ36NdtKj6Y0NwRf8jih4Ea5WzepS yfAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768849304; x=1769454104; 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=Fg4lQuSz2uMSZCTXRMENupFadUJJW3UP/sqjVDUlYQ8=; b=IoM55hROPnhkGET4/Sh5Dhe70bQoSGtiv5pMXOo2STBu3NRtJhWD2bF2bSNQnkxZAs 4ZFStvp5Lq89hW0DkZr9pY7EE1NUMXzgZEsDAmayPOhYAm/lfnIMQKqS0nYain4FO/Wx 9qxVV47dTwUxKJvf3FX18DxZ/a7gWgWI0fvtiru/XXg9uMzujJ9SSRSRWbnw7FdpgQOe 6EuHZtGTV5b5xSO4SNFEYNOP07WmxvVr5l4CplUgCWUIM5V2c87byOqfgOolLOG2KxQX Uu6DEWSNoIi7O3z7Gi2jk4P6d8KeeC4TwSiwUuMpa2V8etpGMNdzHNOx7S6bf8NVKRYp UIkw== X-Forwarded-Encrypted: i=1; AJvYcCW+iNJS8P/zDb06YG8JAWdxr6SVgj4ByRFpq9DmYDDy4v3ZFCQwheYQfjbDLQCtWesA/yEXBMV700ClczVd@lists.postgresql.org X-Gm-Message-State: AOJu0YyVHI84IXyGylUiCZfQLoa9wR5t+scrT9oNle0sy4Bvt1P+CYJ7 o9rTdhFAy2OkYjw3tzUfYvkiUybxbgwKsT7JHJhj+6IPOCHxVBcKFkKBdJqFMWgKI/1KN4p+8RL EarpARMXcRwXvPrWOQ23D7wZksBP07v3rLeYAFg+y X-Gm-Gg: AY/fxX6g991fFJMFqa5x+QArpRjXbxepi9JaZ7iKQTQ3YtgbilarDzB6Ss17Um7fX36 pvZP4fYsAOQjP3vJyVIMh8w0DULVEQ3V4ATgNXRsNcFaPxHe4Ml9CuIIl40t/mHeq6FydT8BgZj udiqyRlE6t9XX2U4TzfkXB+UiOvBQwkFwD/KOWA1hQPH8KHRwQBrfUcIJxo2rsu/ynMc7pRJ3Wz 7tH+j9xTLvHiTZC7es3M9CDLdohmaUVCTPERQZn/IbaRlcmBLCM4vNg/FECNn2m4gTf7oqm X-Received: by 2002:a05:622a:348:b0:4ff:bfd9:dd31 with SMTP id d75a77b69052e-502b06eb15dmr21868311cf.5.1768849303680; Mon, 19 Jan 2026 11:01:43 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Hannu Krosing Date: Mon, 19 Jan 2026 20:01:29 +0100 X-Gm-Features: AZwV_QhQE0s2AKENFUxIAmHlLwkG1pRZpOwhairyzXK5Ia2pCOTRByHWZxh4gIM Message-ID: Subject: Re: Patch: dumping tables data in multiple chunks in pg_dump To: David Rowley Cc: Ashutosh Bapat , PostgreSQL Hackers , Nathan Bossart Content-Type: multipart/mixed; boundary="00000000000069682f0648c252fb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000069682f0648c252fb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Here is a new patch which has * changed flag name to max-table-segment-pages * added check for amname =3D "heap" * made the table info query use pg_relation_size() to get relpages if the --max-table-segment-pages is set * added simple chunked dump and restore test Currently there is no check for actual restore integrity, this is what t/002_pg_dump.pl says: # TODO: Have pg_restore actually restore to an independent # database and then pg_dump *that* database (or something along # those lines) to validate that part of the process. As my perl-fu is weak I did not build the new facility to have full restored data checking, but I did add simple count + table hash warnings for original and restored data so I could manually verify tha restore added this for original and chunked restore database: DO \$\$ DECLARE thash_rec RECORD; BEGIN SELECT 'tplain', count(*), sum(hashtext(t::text)) as tablehash INTO thash_rec FROM tplain AS t; RAISE WARNING 'thash after parallel chunked restore: %', thash_rec; END; \$\$; And this is the verification I did after running `make check` in src/bin/pg_dump/ hannu@HK395:~/work/pggit/src/bin/pg_dump$ grep "WARNING.*thash" tmp_check/log/004_pg_dump_parallel_main.log RAISE WARNING 'thash: %', thash_rec; 2026-01-19 19:27:57.444 CET client backend[678937] 004_pg_dump_parallel.pl WARNING: thash: (tplain,1000,38441792160) RAISE WARNING 'thash after parallel chunked restore: %', thash_rec; 2026-01-19 19:27:57.605 CET client backend[678985] 004_pg_dump_parallel.pl WARNING: thash after parallel chunked restore: (tplain,1000,38441792160) As you see both have 1000 rows with sum of full row hashes =3D=3D 384417921= 60 Other rows in the same log foile show that it was dumped as 3 chunks as I still have the Warnings in code which show the query used. Anyone with a better understanding of our Perl tests is welcome to turn this into proper tests or advise me where to find info on how to do it. On Tue, Jan 13, 2026 at 3:27=E2=80=AFAM David Rowley = wrote: > ... > 3. You should be able to simplify the code in dumpTableData() so > you're not adding any extra cases. You could use InvalidBlockNumber to > indicate an unbounded ctid range and only add ctid qual to the WHERE > clause when you have a bounded range (i.e not InvalidBlockNumber). > That way the first segment will need WHERE ctid <=3D '...' and the final > one will need WHERE ctid >=3D '...'. Everything in between will have an > upper and lower bound. That results in no ctid quals being added when > both ranges are set to InvalidBlockNumber, which you should use for > all tables not large enough to be segmented, thus no special case. > > TID Range scans are perfectly capable of working when only bounded at one= side. I changed the last open-ended chunk to use ctid >=3D (N,1) for clarity but did not change anything else. To me it looked like having a loop around the whole thing when there is no chunking would complicate things for anyone reading the code. > 4. I think using "int" here is a future complaint waiting to happen. > > + if (!option_parse_int(optarg, "--huge-table-chunk-pages", 1, INT32_MAX, > + &dopt.huge_table_chunk_pages)) > > I bet we'll eventually see a complaint that someone can't make the > segment size larger than 16TB. I think option_parse_uint32() might be > called for. I have not yet done anything with this yet, so the maximum chunk size for now is half of the maximum relpages. --00000000000069682f0648c252fb Content-Type: application/x-patch; name="v7-0001-changed-flag-name-to-max-table-segment-pages.patch" Content-Disposition: attachment; filename="v7-0001-changed-flag-name-to-max-table-segment-pages.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mklipguv0 RnJvbSA5ZTRhMThjNDc3YzdkZjM0NmVhNDE1MDgzMGYzNGMxMTVmYzcyNmJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYW5udSBLcm9zaW5nIDxoYW5udWtAZ29vZ2xlLmNvbT4KRGF0 ZTogTW9uLCAxOSBKYW4gMjAyNiAxOTozNzo1OCArMDEwMApTdWJqZWN0OiBbUEFUQ0ggdjddICog Y2hhbmdlZCBmbGFnIG1uYW1lIHRvIG1heC10YWJsZS1zZWdtZW50LXBhZ2VzICogYWRkZWQKIGNo ZWNrIGZvciBhbW5hbWUgPSAiaGVhcCIgKiBhZGRlZCBzaW1wbGUgY2h1bmtlZCBkdW1wIGFuZCBy ZXN0b3JlIHRlc3QKCiogYWRkZWQgYSBXQVJOSU5HIHdpdGggY291bnQgYW5kIHRhYmxlIGRhdGEg aGFzaCB0byBzb3VyY2UgYW5kIGNodW5rZWQgcmVzdG9yZSBkYXRhYmFzZQotLS0KIHNyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXAuaCAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmMgICAgICAgICAgICAgICAgIHwgMTcyICsrKysrKysrKysrKysrKysrLS0tLS0KIHNyYy9i aW4vcGdfZHVtcC9wZ19kdW1wLmggICAgICAgICAgICAgICAgIHwgICA1ICsKIHNyYy9iaW4vcGdf ZHVtcC90LzAwNF9wZ19kdW1wX3BhcmFsbGVsLnBsIHwgIDUyICsrKysrKysKIDUgZmlsZXMgY2hh bmdlZCwgMTkzIGluc2VydGlvbnMoKyksIDM4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApp bmRleCBkOTA0MWRhZDcyMC4uMjhkZjE4ZmQ5OTMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKQEAgLTE3OCw2 ICsxNzgsNyBAQCB0eXBlZGVmIHN0cnVjdCBfZHVtcE9wdGlvbnMKIAlib29sCQlhY2xzU2tpcDsK IAljb25zdCBjaGFyICpsb2NrV2FpdFRpbWVvdXQ7CiAJaW50CQkJZHVtcF9pbnNlcnRzOwkvKiAw ID0gQ09QWSwgb3RoZXJ3aXNlIHJvd3MgcGVyIElOU0VSVCAqLworCWludAkJCW1heF90YWJsZV9z ZWdtZW50X3BhZ2VzOyAvKiBjaHVuayB3aGVuIHJlbHBhZ2VzIGlzIGFib3ZlIHRoaXMgKi8KIAog CS8qIGZsYWdzIGZvciB2YXJpb3VzIGNvbW1hbmQtbGluZSBsb25nIG9wdGlvbnMgKi8KIAlpbnQJ CQlkaXNhYmxlX2RvbGxhcl9xdW90aW5nOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5j CmluZGV4IDRhNjNmNzM5MmFlLi43MGU0ZGE5YTk3MCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf YXJjaGl2ZXIuYwpAQCAtMTU0LDYgKzE1NCw3IEBAIEluaXREdW1wT3B0aW9ucyhEdW1wT3B0aW9u cyAqb3B0cykKIAlvcHRzLT5kdW1wU2NoZW1hID0gdHJ1ZTsKIAlvcHRzLT5kdW1wRGF0YSA9IHRy dWU7CiAJb3B0cy0+ZHVtcFN0YXRpc3RpY3MgPSBmYWxzZTsKKwlvcHRzLT5tYXhfdGFibGVfc2Vn bWVudF9wYWdlcyA9IFVJTlQzMl9NQVg7IC8qID09IEludmFsaWRCbG9ja051bWJlciwgZGlzYWJs ZSBjaHVua2luZyBieSBkZWZhdWx0ICovCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA2ODdkYzk4 ZTQ2ZC4uNTE1ZTJmMmY2NGEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtNTM5LDYgKzUzOSw3IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7ImV4Y2x1ZGUtZXh0ZW5zaW9uIiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsIDE3fSwKIAkJeyJzZXF1ZW5jZS1kYXRhIiwgbm9fYXJndW1lbnQsICZk b3B0LnNlcXVlbmNlX2RhdGEsIDF9LAogCQl7InJlc3RyaWN0LWtleSIsIHJlcXVpcmVkX2FyZ3Vt ZW50LCBOVUxMLCAyNX0sCisJCXsibWF4LXRhYmxlLXNlZ21lbnQtcGFnZXMiLCByZXF1aXJlZF9h cmd1bWVudCwgTlVMTCwgMjZ9LAogCiAJCXtOVUxMLCAwLCBOVUxMLCAwfQogCX07CkBAIC04MDMs NiArODA0LDEzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWRvcHQucmVzdHJp Y3Rfa2V5ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgMjY6CQkJ LyogaHVnZSB0YWJsZSBjaHVuayBwYWdlcyAqLworCQkJCWlmICghb3B0aW9uX3BhcnNlX2ludChv cHRhcmcsICItLW1heC10YWJsZS1zZWdtZW50LXBhZ2VzIiwgMSwgSU5UMzJfTUFYLAorCQkJCQkJ CQkJICAmZG9wdC5tYXhfdGFibGVfc2VnbWVudF9wYWdlcykpCisJCQkJCWV4aXRfbmljZWx5KDEp OworCQkJCXBnX2xvZ193YXJuaW5nKCJDSFVOS0lORzogc2V0IGRvcHQubWF4X3RhYmxlX3NlZ21l bnRfcGFnZXMgdG8gWyV1XSIsKEJsb2NrTnVtYmVyKSBkb3B0Lm1heF90YWJsZV9zZWdtZW50X3Bh Z2VzKTsKKwkJCQlicmVhazsKKwogCQkJZGVmYXVsdDoKIAkJCQkvKiBnZXRvcHRfbG9uZyBhbHJl YWR5IGVtaXR0ZWQgYSBjb21wbGFpbnQgKi8KIAkJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwi JXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOwpAQCAtMTM3Miw2 ICsxMzgwLDkgQEAgaGVscChjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtLWV4 dHJhLWZsb2F0LWRpZ2l0cz1OVU0gICAgIG92ZXJyaWRlIGRlZmF1bHQgc2V0dGluZyBmb3IgZXh0 cmFfZmxvYXRfZGlnaXRzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1maWx0ZXI9RklMRU5BTUUgICAg ICAgICAgICBpbmNsdWRlIG9yIGV4Y2x1ZGUgb2JqZWN0cyBhbmQgZGF0YSBmcm9tIGR1bXBcbiIK IAkJCSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGV4cHJlc3Npb25z IGluIEZJTEVOQU1FXG4iKSk7CisJcHJpbnRmKF8oIiAgLS1tYXgtdGFibGUtc2VnbWVudC1wYWdl cz1OVU1QQUdFU1xuIgorCQkgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVt YmVyIG9mIG1haW4gdGFibGUgcGFnZXMgYWJvdmUgd2hpY2ggZGF0YSBpcyBcbiIKKwkJCSAiICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZCBvdXQgaW4gY2h1bmtzLCBhbHNvIGRl dGVybWluZXMgdGhlIGNodW5rIHNpemVcbiIpKTsKIAlwcmludGYoXygiICAtLWlmLWV4aXN0cyAg ICAgICAgICAgICAgICAgIHVzZSBJRiBFWElTVFMgd2hlbiBkcm9wcGluZyBvYmplY3RzXG4iKSk7 CiAJcHJpbnRmKF8oIiAgLS1pbmNsdWRlLWZvcmVpZ24tZGF0YT1QQVRURVJOXG4iCiAJCQkgIiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIGRhdGEgb2YgZm9yZWlnbiB0YWJs ZXMgb24gZm9yZWlnblxuIgpAQCAtMjQxMiw3ICsyNDIzLDcgQEAgZHVtcFRhYmxlRGF0YV9jb3B5 KEFyY2hpdmUgKmZvdXQsIGNvbnN0IHZvaWQgKmRjb250ZXh0KQogCSAqIGEgZmlsdGVyIGNvbmRp dGlvbiB3YXMgc3BlY2lmaWVkLiAgRm9yIG90aGVyIGNhc2VzIGEgc2ltcGxlIENPUFkKIAkgKiBz dWZmaWNlcy4KIAkgKi8KLQlpZiAodGRpbmZvLT5maWx0ZXJjb25kIHx8IHRiaW5mby0+cmVsa2lu ZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCisJaWYgKHRkaW5mby0+ZmlsdGVyY29uZCB8fCB0 ZGluZm8tPmNodW5raW5nIHx8IHRiaW5mby0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFC TEUpCiAJewogCQkvKiBUZW1wb3JhcnkgYWxsb3dzIHRvIGFjY2VzcyB0byBmb3JlaWduIHRhYmxl cyB0byBkdW1wIGRhdGEgKi8KIAkJaWYgKHRiaW5mby0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJ R05fVEFCTEUpCkBAIC0yNDI4LDkgKzI0MzksMjMgQEAgZHVtcFRhYmxlRGF0YV9jb3B5KEFyY2hp dmUgKmZvdXQsIGNvbnN0IHZvaWQgKmRjb250ZXh0KQogCQllbHNlCiAJCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihxLCAiKiAiKTsKIAotCQlhcHBlbmRQUUV4cEJ1ZmZlcihxLCAiRlJPTSAlcyAlcykg VE8gc3Rkb3V0OyIsCisJCWFwcGVuZFBRRXhwQnVmZmVyKHEsICJGUk9NICVzICVzIiwKIAkJCQkJ CSAgZm10UXVhbGlmaWVkRHVtcGFibGUodGJpbmZvKSwKIAkJCQkJCSAgdGRpbmZvLT5maWx0ZXJj b25kID8gdGRpbmZvLT5maWx0ZXJjb25kIDogIiIpOworCQlpZiAodGRpbmZvLT5jaHVua2luZykK KwkJeworCQkJaWYodGRpbmZvLT5lbmRQYWdlICE9IEludmFsaWRCbG9ja051bWJlcikKKwkJCQlh cHBlbmRQUUV4cEJ1ZmZlcihxLCAiJXMgY3RpZCBCRVRXRUVOICcoJXUsMSknIEFORCAnKCV1LDMy MDAwKSciLCAvKiB0aGVyZSBpcyBubyAoKiwwKSB0dXBsZSAqLworCQkJCQkJCQkgdGRpbmZvLT5m aWx0ZXJjb25kPyIgQU5EICI6IiBXSEVSRSAiLAorCQkJCQkJCQkgdGRpbmZvLT5zdGFydFBhZ2Us IHRkaW5mby0+ZW5kUGFnZSk7CisJCQllbHNlCisJCQkJYXBwZW5kUFFFeHBCdWZmZXIocSwgIiVz IGN0aWQgPj0gJygldSwxKSciLCAvKiB0aGVyZSBpcyBubyAoKiwwKSB0dXBsZSAqLworCQkJCQkJ CQkgdGRpbmZvLT5maWx0ZXJjb25kPyIgQU5EICI6IiBXSEVSRSAiLAorCQkJCQkJCQkgdGRpbmZv LT5zdGFydFBhZ2UpOworCQkJcGdfbG9nX3dhcm5pbmcoIkNIVU5LSU5HOiBwYWdlcyBbJXU6JXVd Iix0ZGluZm8tPnN0YXJ0UGFnZSwgdGRpbmZvLT5lbmRQYWdlKTsKKwkJfQorCQkKKwkJYXBwZW5k UFFFeHBCdWZmZXIocSwgIikgVE8gc3Rkb3V0OyIpOwogCX0KIAllbHNlCiAJewpAQCAtMjQzOCw2 ICsyNDYzLDkgQEAgZHVtcFRhYmxlRGF0YV9jb3B5KEFyY2hpdmUgKmZvdXQsIGNvbnN0IHZvaWQg KmRjb250ZXh0KQogCQkJCQkJICBmbXRRdWFsaWZpZWREdW1wYWJsZSh0YmluZm8pLAogCQkJCQkJ ICBjb2x1bW5fbGlzdCk7CiAJfQorCisJcGdfbG9nX3dhcm5pbmcoIkNIVU5LSU5HOiBkYXRhIHF1 ZXJ5OiAlcyIsIHEtPmRhdGEpOworCQogCXJlcyA9IEV4ZWN1dGVTcWxRdWVyeShmb3V0LCBxLT5k YXRhLCBQR1JFU19DT1BZX09VVCk7CiAJUFFjbGVhcihyZXMpOwogCWRlc3Ryb3lQUUV4cEJ1ZmZl cihjbGlzdEJ1Zik7CkBAIC0yOTMzLDQyICsyOTYxLDEwMCBAQCBkdW1wVGFibGVEYXRhKEFyY2hp dmUgKmZvdXQsIGNvbnN0IFRhYmxlRGF0YUluZm8gKnRkaW5mbykKIAl7CiAJCVRvY0VudHJ5ICAg KnRlOwogCi0JCXRlID0gQXJjaGl2ZUVudHJ5KGZvdXQsIHRkaW5mby0+ZG9iai5jYXRJZCwgdGRp bmZvLT5kb2JqLmR1bXBJZCwKLQkJCQkJCSAgQVJDSElWRV9PUFRTKC50YWcgPSB0YmluZm8tPmRv YmoubmFtZSwKLQkJCQkJCQkJCSAgIC5uYW1lc3BhY2UgPSB0YmluZm8tPmRvYmoubmFtZXNwYWNl LT5kb2JqLm5hbWUsCi0JCQkJCQkJCQkgICAub3duZXIgPSB0YmluZm8tPnJvbG5hbWUsCi0JCQkJ CQkJCQkgICAuZGVzY3JpcHRpb24gPSAiVEFCTEUgREFUQSIsCi0JCQkJCQkJCQkgICAuc2VjdGlv biA9IFNFQ1RJT05fREFUQSwKLQkJCQkJCQkJCSAgIC5jcmVhdGVTdG10ID0gdGREZWZuLAotCQkJ CQkJCQkJICAgLmNvcHlTdG10ID0gY29weVN0bXQsCi0JCQkJCQkJCQkgICAuZGVwcyA9ICYodGJp bmZvLT5kb2JqLmR1bXBJZCksCi0JCQkJCQkJCQkgICAubkRlcHMgPSAxLAotCQkJCQkJCQkJICAg LmR1bXBGbiA9IGR1bXBGbiwKLQkJCQkJCQkJCSAgIC5kdW1wQXJnID0gdGRpbmZvKSk7Ci0KLQkJ LyoKLQkJICogU2V0IHRoZSBUb2NFbnRyeSdzIGRhdGFMZW5ndGggaW4gY2FzZSB3ZSBhcmUgZG9p bmcgYSBwYXJhbGxlbCBkdW1wCi0JCSAqIGFuZCB3YW50IHRvIG9yZGVyIGR1bXAgam9icyBieSB0 YWJsZSBzaXplLiAgV2UgY2hvb3NlIHRvIG1lYXN1cmUKLQkJICogZGF0YUxlbmd0aCBpbiB0YWJs ZSBwYWdlcyAoaW5jbHVkaW5nIFRPQVNUIHBhZ2VzKSBkdXJpbmcgZHVtcCwgc28KLQkJICogbm8g c2NhbGluZyBpcyBuZWVkZWQuCi0JCSAqCi0JCSAqIEhvd2V2ZXIsIHJlbHBhZ2VzIGlzIGRlY2xh cmVkIGFzICJpbnRlZ2VyIiBpbiBwZ19jbGFzcywgYW5kIGhlbmNlCi0JCSAqIGFsc28gaW4gVGFi bGVJbmZvLCBidXQgaXQncyByZWFsbHkgQmxvY2tOdW1iZXIgYS9rL2EgdW5zaWduZWQgaW50Lgot CQkgKiBDYXN0IHNvIHRoYXQgd2UgZ2V0IHRoZSByaWdodCBpbnRlcnByZXRhdGlvbiBvZiB0YWJs ZSBzaXplcwotCQkgKiBleGNlZWRpbmcgSU5UX01BWCBwYWdlcy4KKwkJLyogY2h1bmtpbmcgd29y a3Mgb2ZmIHJlbHBhZ2VzLCB3aGljaCBtYXkgYmUgc2xpZ2h0bHkgb2ZmCisJCSAqIGJ1dCBpcyB0 aGUgYmVzdCB3ZSBoYXZlIHdpdGhvdXQgZG9pbmcgb3VyIG93biBwYWdlIGNvdW50CisJCSAqIGl0 IHNob3VsZCBiZSBlbm91Z2ggZm9yIHR5cGljYWwgdXNlIGNhc2Ugb2YgaHVnZSB0YWJsZXMgd2hp Y2ggCisJCSAqIHNob3VsZCBoYXZlIHRoZWlyIHJlbHBhZ2VzIHVwZGF0ZWQgYnkgYXV0b3ZhY3V1 bQorCQkgKiAKKwkJICogRm9yIG5vdyB3ZSBvbmx5IGRvIGN1bmtpbmcgd2hlbiB0YWJsZSBhY2Nl c3MgbWV0aG9kIGlzIGhlYXAKKwkJICogd2UgbWF5IGFkZCBvdGhlciBjaHVua2luZyBtZXRob2Rz IGxhdGVyLiAKIAkJICovCi0JCXRlLT5kYXRhTGVuZ3RoID0gKEJsb2NrTnVtYmVyKSB0YmluZm8t PnJlbHBhZ2VzOwotCQl0ZS0+ZGF0YUxlbmd0aCArPSAoQmxvY2tOdW1iZXIpIHRiaW5mby0+dG9h c3RwYWdlczsKKwkJaWYgKChCbG9ja051bWJlcikgdGJpbmZvLT5yZWxwYWdlcyA8IGRvcHQtPm1h eF90YWJsZV9zZWdtZW50X3BhZ2VzIHx8IAorCQkJc3RyY21wKHRiaW5mby0+YW1uYW1lLCAiaGVh cCIpICE9IDApCisJCXsKKwkJCXRlID0gQXJjaGl2ZUVudHJ5KGZvdXQsIHRkaW5mby0+ZG9iai5j YXRJZCwgdGRpbmZvLT5kb2JqLmR1bXBJZCwKKwkJCQkJCQlBUkNISVZFX09QVFMoLnRhZyA9IHRi aW5mby0+ZG9iai5uYW1lLAorCQkJCQkJCQkJCS5uYW1lc3BhY2UgPSB0YmluZm8tPmRvYmoubmFt ZXNwYWNlLT5kb2JqLm5hbWUsCisJCQkJCQkJCQkJLm93bmVyID0gdGJpbmZvLT5yb2xuYW1lLAor CQkJCQkJCQkJCS5kZXNjcmlwdGlvbiA9ICJUQUJMRSBEQVRBIiwKKwkJCQkJCQkJCQkuc2VjdGlv biA9IFNFQ1RJT05fREFUQSwKKwkJCQkJCQkJCQkuY3JlYXRlU3RtdCA9IHRkRGVmbiwKKwkJCQkJ CQkJCQkuY29weVN0bXQgPSBjb3B5U3RtdCwKKwkJCQkJCQkJCQkuZGVwcyA9ICYodGJpbmZvLT5k b2JqLmR1bXBJZCksCisJCQkJCQkJCQkJLm5EZXBzID0gMSwKKwkJCQkJCQkJCQkuZHVtcEZuID0g ZHVtcEZuLAorCQkJCQkJCQkJCS5kdW1wQXJnID0gdGRpbmZvKSk7CiAKLQkJLyoKLQkJICogSWYg cGdvZmZfdCBpcyBvbmx5IDMyIGJpdHMgd2lkZSwgdGhlIGFib3ZlIHJlZmluZW1lbnQgaXMgdXNl bGVzcywKLQkJICogYW5kIGluc3RlYWQgd2UnZCBiZXR0ZXIgd29ycnkgYWJvdXQgaW50ZWdlciBv dmVyZmxvdy4gIENsYW1wIHRvCi0JCSAqIElOVF9NQVggaWYgdGhlIGNvcnJlY3QgcmVzdWx0IGV4 Y2VlZHMgdGhhdC4KLQkJICovCi0JCWlmIChzaXplb2YodGUtPmRhdGFMZW5ndGgpID09IDQgJiYK LQkJCSh0YmluZm8tPnJlbHBhZ2VzIDwgMCB8fCB0YmluZm8tPnRvYXN0cGFnZXMgPCAwIHx8Ci0J CQkgdGUtPmRhdGFMZW5ndGggPCAwKSkKLQkJCXRlLT5kYXRhTGVuZ3RoID0gSU5UX01BWDsKKwkJ CS8qCisJCQkqIFNldCB0aGUgVG9jRW50cnkncyBkYXRhTGVuZ3RoIGluIGNhc2Ugd2UgYXJlIGRv aW5nIGEgcGFyYWxsZWwgZHVtcAorCQkJKiBhbmQgd2FudCB0byBvcmRlciBkdW1wIGpvYnMgYnkg dGFibGUgc2l6ZS4gIFdlIGNob29zZSB0byBtZWFzdXJlCisJCQkqIGRhdGFMZW5ndGggaW4gdGFi bGUgcGFnZXMgKGluY2x1ZGluZyBUT0FTVCBwYWdlcykgZHVyaW5nIGR1bXAsIHNvCisJCQkqIG5v IHNjYWxpbmcgaXMgbmVlZGVkLgorCQkJKgorCQkJKiBIb3dldmVyLCByZWxwYWdlcyBpcyBkZWNs YXJlZCBhcyAiaW50ZWdlciIgaW4gcGdfY2xhc3MsIGFuZCBoZW5jZQorCQkJKiBhbHNvIGluIFRh YmxlSW5mbywgYnV0IGl0J3MgcmVhbGx5IEJsb2NrTnVtYmVyIGEvay9hIHVuc2lnbmVkIGludC4K KwkJCSogQ2FzdCBzbyB0aGF0IHdlIGdldCB0aGUgcmlnaHQgaW50ZXJwcmV0YXRpb24gb2YgdGFi bGUgc2l6ZXMKKwkJCSogZXhjZWVkaW5nIElOVF9NQVggcGFnZXMuCisJCQkqLworCQkJdGUtPmRh dGFMZW5ndGggPSAoQmxvY2tOdW1iZXIpIHRiaW5mby0+cmVscGFnZXM7CisJCQl0ZS0+ZGF0YUxl bmd0aCArPSAoQmxvY2tOdW1iZXIpIHRiaW5mby0+dG9hc3RwYWdlczsKKworCQkJLyoKKwkJCSog SWYgcGdvZmZfdCBpcyBvbmx5IDMyIGJpdHMgd2lkZSwgdGhlIGFib3ZlIHJlZmluZW1lbnQgaXMg dXNlbGVzcywKKwkJCSogYW5kIGluc3RlYWQgd2UnZCBiZXR0ZXIgd29ycnkgYWJvdXQgaW50ZWdl ciBvdmVyZmxvdy4gIENsYW1wIHRvCisJCQkqIElOVF9NQVggaWYgdGhlIGNvcnJlY3QgcmVzdWx0 IGV4Y2VlZHMgdGhhdC4KKwkJCSovCisJCQlpZiAoc2l6ZW9mKHRlLT5kYXRhTGVuZ3RoKSA9PSA0 ICYmCisJCQkJKHRiaW5mby0+cmVscGFnZXMgPCAwIHx8IHRiaW5mby0+dG9hc3RwYWdlcyA8IDAg fHwKKwkJCQl0ZS0+ZGF0YUxlbmd0aCA8IDApKQorCQkJCXRlLT5kYXRhTGVuZ3RoID0gSU5UX01B WDsKKwkJfQorCQllbHNlCisJCXsKKwkJCUJsb2NrTnVtYmVyIGN1cnJlbnRfY2h1bmtfc3RhcnQg PSAwOworCQkJUFFFeHBCdWZmZXIgY2h1bmtfZGVzYyA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJ CQkKKwkJCXBnX2xvZ193YXJuaW5nKCJDSFVOS0lORzogdG9jIGZvciBjaHVua2VkIHJlbHBhZ2Vz IFsldV0iLChCbG9ja051bWJlcikgdGJpbmZvLT5yZWxwYWdlcyk7CisKKwkJCXdoaWxlIChjdXJy ZW50X2NodW5rX3N0YXJ0IDwgKEJsb2NrTnVtYmVyKSB0YmluZm8tPnJlbHBhZ2VzKQorCQkJewor CQkJCVRhYmxlRGF0YUluZm8gKmNodW5rX3RkaW5mbyA9IChUYWJsZURhdGFJbmZvICopIHBnX21h bGxvYyhzaXplb2YoVGFibGVEYXRhSW5mbykpOworCisJCQkJbWVtY3B5KGNodW5rX3RkaW5mbywg dGRpbmZvLCBzaXplb2YoVGFibGVEYXRhSW5mbykpOworCQkJCUFzc2lnbkR1bXBJZCgmY2h1bmtf dGRpbmZvLT5kb2JqKTsKKwkJCQkvL2FkZE9iamVjdERlcGVuZGVuY3koJmNodW5rX3RkaW5mby0+ ZG9iaiwgdGJpbmZvLT5kb2JqLmR1bXBJZCk7IC8qIGRvIHdlIG5lZWQgdGhpcyBoZXJlICovCisJ CQkJY2h1bmtfdGRpbmZvLT5jaHVua2luZyA9IHRydWU7CisJCQkJY2h1bmtfdGRpbmZvLT5zdGFy dFBhZ2UgPSBjdXJyZW50X2NodW5rX3N0YXJ0OworCQkJCWNodW5rX3RkaW5mby0+ZW5kUGFnZSA9 IGN1cnJlbnRfY2h1bmtfc3RhcnQgKyBkb3B0LT5tYXhfdGFibGVfc2VnbWVudF9wYWdlcyAtIDE7 CisKKwkJCQlwZ19sb2dfd2FybmluZygiQ0hVTktJTkc6IHRvYyBmb3IgcGFnZXMgWyV1OiV1XSIs Y2h1bmtfdGRpbmZvLT5zdGFydFBhZ2UsIGNodW5rX3RkaW5mby0+ZW5kUGFnZSk7CisJCQkJCisJ CQkJY3VycmVudF9jaHVua19zdGFydCArPSBkb3B0LT5tYXhfdGFibGVfc2VnbWVudF9wYWdlczsK KwkJCQlpZiAoY3VycmVudF9jaHVua19zdGFydCA+PSAoQmxvY2tOdW1iZXIpIHRiaW5mby0+cmVs cGFnZXMpCisJCQkJCWNodW5rX3RkaW5mby0+ZW5kUGFnZSA9IFVJTlQzMl9NQVg7IC8qIGxhc3Qg Y2h1bmsgaXMgZm9yICJhbGwgdGhlIHJlc3QiICovCisKKwkJCQlwcmludGZQUUV4cEJ1ZmZlcihj aHVua19kZXNjLCAiVEFCTEUgREFUQSAocGFnZXMgJXU6JXUpIiwgY2h1bmtfdGRpbmZvLT5zdGFy dFBhZ2UsIGNodW5rX3RkaW5mby0+ZW5kUGFnZSk7CisKKwkJCQl0ZSA9IEFyY2hpdmVFbnRyeShm b3V0LCBjaHVua190ZGluZm8tPmRvYmouY2F0SWQsIGNodW5rX3RkaW5mby0+ZG9iai5kdW1wSWQs CisJCQkJCQkJQVJDSElWRV9PUFRTKC50YWcgPSB0YmluZm8tPmRvYmoubmFtZSwKKwkJCQkJCQkJ CQkubmFtZXNwYWNlID0gdGJpbmZvLT5kb2JqLm5hbWVzcGFjZS0+ZG9iai5uYW1lLAorCQkJCQkJ CQkJCS5vd25lciA9IHRiaW5mby0+cm9sbmFtZSwKKwkJCQkJCQkJCQkuZGVzY3JpcHRpb24gPSBj aHVua19kZXNjLT5kYXRhLAorCQkJCQkJCQkJCS5zZWN0aW9uID0gU0VDVElPTl9EQVRBLAorCQkJ CQkJCQkJCS5jcmVhdGVTdG10ID0gdGREZWZuLAorCQkJCQkJCQkJCS5jb3B5U3RtdCA9IGNvcHlT dG10LAorCQkJCQkJCQkJCS5kZXBzID0gJih0YmluZm8tPmRvYmouZHVtcElkKSwKKwkJCQkJCQkJ CQkubkRlcHMgPSAxLAorCQkJCQkJCQkJCS5kdW1wRm4gPSBkdW1wRm4sCisJCQkJCQkJCQkJLmR1 bXBBcmcgPSBjaHVua190ZGluZm8pKTsKKworCQkJCXRlLT5kYXRhTGVuZ3RoID0gZG9wdC0+bWF4 X3RhYmxlX3NlZ21lbnRfcGFnZXM7CisJCQkJLyogbGV0J3MgYXNzdW1lIHRvYXN0IHBhZ2VzIGRp c3RyaWJ1dGUgZXZlbmx5IGFtb25nIGNodW5rcyAqLworCQkJCXRlLT5kYXRhTGVuZ3RoICs9IChv ZmZfdClkb3B0LT5tYXhfdGFibGVfc2VnbWVudF9wYWdlcyAqIHRiaW5mby0+dG9hc3RwYWdlcyAv IHRiaW5mby0+cmVscGFnZXM7CisJCQl9CisKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihjaHVua19k ZXNjKTsKKwkJfQogCX0KIAogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihjb3B5QnVmKTsKQEAgLTMwOTIs NiArMzE3OCw5IEBAIG1ha2VUYWJsZURhdGFJbmZvKER1bXBPcHRpb25zICpkb3B0LCBUYWJsZUlu Zm8gKnRiaW5mbykKIAl0ZGluZm8tPmRvYmoubmFtZXNwYWNlID0gdGJpbmZvLT5kb2JqLm5hbWVz cGFjZTsKIAl0ZGluZm8tPnRkdGFibGUgPSB0YmluZm87CiAJdGRpbmZvLT5maWx0ZXJjb25kID0g TlVMTDsJLyogbWlnaHQgZ2V0IHNldCBsYXRlciAqLworCXRkaW5mby0+Y2h1bmtpbmcgPSBmYWxz ZTsgLyogZGVmYXVsdHMgKi8KKwl0ZGluZm8tPnN0YXJ0UGFnZSA9IDA7CisJdGRpbmZvLT5lbmRQ YWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCWFkZE9iamVjdERlcGVuZGVuY3koJnRkaW5mby0+ ZG9iaiwgdGJpbmZvLT5kb2JqLmR1bXBJZCk7CiAKIAkvKiBBIFRhYmxlRGF0YUluZm8gY29udGFp bnMgZGF0YSwgb2YgY291cnNlICovCkBAIC03MjU0LDggKzczNDMsMTUgQEAgZ2V0VGFibGVzKEFy Y2hpdmUgKmZvdXQsIGludCAqbnVtVGFibGVzKQogCQkJCQkJICJjLnJlbG5hbWVzcGFjZSwgYy5y ZWxraW5kLCBjLnJlbHR5cGUsICIKIAkJCQkJCSAiYy5yZWxvd25lciwgIgogCQkJCQkJICJjLnJl bGNoZWNrcywgIgotCQkJCQkJICJjLnJlbGhhc2luZGV4LCBjLnJlbGhhc3J1bGVzLCBjLnJlbHBh Z2VzLCAiCi0JCQkJCQkgImMucmVsdHVwbGVzLCBjLnJlbGFsbHZpc2libGUsICIpOworCQkJCQkJ ICJjLnJlbGhhc2luZGV4LCBjLnJlbGhhc3J1bGVzLCAiKTsKKworCS8qIHVzZSByZWFsIHJlbGF0 aW9uIHNpemUgaWYgY2h1bmtpbmcgaXMgcmVxdWVzdGVkICovCisJaWYoZG9wdC0+bWF4X3RhYmxl X3NlZ21lbnRfcGFnZXMgIT0gSW52YWxpZEJsb2NrTnVtYmVyKQorCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihxdWVyeSwgInBnX3JlbGF0aW9uX3NpemUoYy50YWJsZW9pZCkvODE5MiBBUyByZWxwYWdl cywgIik7CisJZWxzZQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgImMucmVscGFnZXMs ICIpOworCisJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJjLnJlbHR1cGxlcywgYy5yZWxh bGx2aXNpYmxlLCAiKTsKIAogCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE4MDAwMCkKIAkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJjLnJlbGFsbGZyb3plbiwgIik7CmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu aAppbmRleCA0YzRiMTRlNWZjNy4uZGRhZjM0MWJiM2IgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaApAQCAtMTYsNiAr MTYsNyBAQAogCiAjaW5jbHVkZSAicGdfYmFja3VwLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19w dWJsaWNhdGlvbl9kLmgiCisjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5oIgogCiAKICNkZWZpbmUg b2lkY21wKHgseSkgKCAoKHgpIDwgKHkpID8gLTEgOiAoKHgpID4gKHkpKSA/ICAxIDogMCkgKQpA QCAtNDEzLDYgKzQxNCwxMCBAQCB0eXBlZGVmIHN0cnVjdCBfdGFibGVEYXRhSW5mbwogCUR1bXBh YmxlT2JqZWN0IGRvYmo7CiAJVGFibGVJbmZvICAqdGR0YWJsZTsJCS8qIGxpbmsgdG8gdGFibGUg dG8gZHVtcCAqLwogCWNoYXIJICAgKmZpbHRlcmNvbmQ7CQkvKiBXSEVSRSBjb25kaXRpb24gdG8g bGltaXQgcm93cyBkdW1wZWQgKi8KKwlib29sIAkJY2h1bmtpbmc7CisJQmxvY2tOdW1iZXIJc3Rh cnRQYWdlOwkJLyogc3RhcnRpbmcgdGFibGUgcGFnZSAqLworCUJsb2NrTnVtYmVyCWVuZFBhZ2U7 CQkvKiBlbmRpbmcgdGFibGUgcGFnZSBmb3IgcGFnZS1yYW5nZSBkdW1wLAorCSAgICAgICAgICAg ICAgICAgICAgCQkgKiBtb3N0bHkgc3RhcnRQYWdlK21heF90YWJsZV9zZWdtZW50X3BhZ2VzICov CiB9IFRhYmxlRGF0YUluZm87CiAKIHR5cGVkZWYgc3RydWN0IF9pbmR4SW5mbwpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDA0X3BnX2R1bXBfcGFyYWxsZWwucGwgYi9zcmMvYmluL3Bn X2R1bXAvdC8wMDRfcGdfZHVtcF9wYXJhbGxlbC5wbAppbmRleCA3MzhmMzRiMWMxYi4uOTA5NDM1 MmUyOWYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwNF9wZ19kdW1wX3BhcmFsbGVs LnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwNF9wZ19kdW1wX3BhcmFsbGVsLnBsCkBAIC0x MSw2ICsxMSw3IEBAIHVzZSBUZXN0OjpNb3JlOwogbXkgJGRibmFtZTEgPSAncmVncmVzc2lvbl9z cmMnOwogbXkgJGRibmFtZTIgPSAncmVncmVzc2lvbl9kZXN0MSc7CiBteSAkZGJuYW1lMyA9ICdy ZWdyZXNzaW9uX2Rlc3QyJzsKK215ICRkYm5hbWU0ID0gJ3JlZ3Jlc3Npb25fZGVzdDMnOwogCiBt eSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicpOwogJG5vZGUt PmluaXQ7CkBAIC0yMSw2ICsyMiw3IEBAIG15ICRiYWNrdXBkaXIgPSAkbm9kZS0+YmFja3VwX2Rp cjsKICRub2RlLT5ydW5fbG9nKFsgJ2NyZWF0ZWRiJywgJGRibmFtZTEgXSk7CiAkbm9kZS0+cnVu X2xvZyhbICdjcmVhdGVkYicsICRkYm5hbWUyIF0pOwogJG5vZGUtPnJ1bl9sb2coWyAnY3JlYXRl ZGInLCAkZGJuYW1lMyBdKTsKKyRub2RlLT5ydW5fbG9nKFsgJ2NyZWF0ZWRiJywgJGRibmFtZTQg XSk7CiAKICRub2RlLT5zYWZlX3BzcWwoCiAJJGRibmFtZTEsCkBAIC00NCw2ICs0NiwxOCBAQCBj cmVhdGUgdGFibGUgdGh0X3AxIHBhcnRpdGlvbiBvZiB0aHQgZm9yIHZhbHVlcyB3aXRoIChtb2R1 bHVzIDMsIHJlbWFpbmRlciAwKTsKIGNyZWF0ZSB0YWJsZSB0aHRfcDIgcGFydGl0aW9uIG9mIHRo dCBmb3IgdmFsdWVzIHdpdGggKG1vZHVsdXMgMywgcmVtYWluZGVyIDEpOwogY3JlYXRlIHRhYmxl IHRodF9wMyBwYXJ0aXRpb24gb2YgdGh0IGZvciB2YWx1ZXMgd2l0aCAobW9kdWx1cyAzLCByZW1h aW5kZXIgMik7CiBpbnNlcnQgaW50byB0aHQgc2VsZWN0ICh4JTEwKTo6dGV4dDo6ZGlnaXQsIHgg ZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSB4OworCistLSByYWlzZSB3YXJuaW5nIHNvIEkg Y2FuIGNoZWNrIGluIC5sb2cgaWYgZGF0YSB3YXMgY29ycmVjdAorRE8gXCRcJAorREVDTEFSRQor ICAgIHRoYXNoX3JlYyBSRUNPUkQ7CitCRUdJTgorICAgIFNFTEVDVCAndHBsYWluJywgY291bnQo KiksIHN1bShoYXNodGV4dCh0Ojp0ZXh0KSkgYXMgdGFibGVoYXNoIAorCSAgSU5UTyB0aGFzaF9y ZWMKKwkgIEZST00gdHBsYWluIEFTIHQ7CisgICAgUkFJU0UgV0FSTklORyAndGhhc2g6ICUnLCB0 aGFzaF9yZWM7CitFTkQ7CitcJFwkOwogCX0pOwogCiAkbm9kZS0+Y29tbWFuZF9vaygKQEAgLTg3 LDQgKzEwMSw0MiBAQCAkbm9kZS0+Y29tbWFuZF9vaygKIAldLAogCSdwYXJhbGxlbCByZXN0b3Jl IGFzIGluc2VydHMnKTsKIAorJG5vZGUtPmNvbW1hbmRfb2soCisJWworCQkncGdfZHVtcCcsCisJ CSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCSctLW1heC10YWJsZS1zZWdtZW50LXBhZ2Vz JyA9PiA1LAorCQknLS1uby1zeW5jJywKKwkJJy0tam9icycgPT4gMiwKKwkJJy0tZmlsZScgPT4g IiRiYWNrdXBkaXIvZHVtcDMiLAorCQkkbm9kZS0+Y29ubnN0cigkZGJuYW1lMSksCisJXSwKKwkn cGFyYWxsZWwgZHVtcCB3aXRoIGNodW5rcyBvZiBmaXZlIGhlYXAgcGFnZXMnKTsKKworJG5vZGUt PmNvbW1hbmRfb2soCisJWworCQkncGdfcmVzdG9yZScsICctLXZlcmJvc2UnLAorCQknLS1kYm5h bWUnID0+ICRub2RlLT5jb25uc3RyKCRkYm5hbWU0KSwKKwkJJy0tam9icycgPT4gMywKKwkJIiRi YWNrdXBkaXIvZHVtcDMiLAorCV0sCisJJ3BhcmFsbGVsIHJlc3RvcmUgd2l0aCBjaHVua3Mgb2Yg Zml2ZSBoZWFwIHBhZ2VzJyk7CisKKyRub2RlLT5zYWZlX3BzcWwoCisJJGRibmFtZTQsCisJcXF7 CisKKy0tIHJhaXNlIHdhcm5pbmcgc28gSSBjYW4gY2hlY2sgaW4gLmxvZyBpZiBkYXRhIHdhcyBj b3JyZWN0CitETyBcJFwkCitERUNMQVJFCisgICAgdGhhc2hfcmVjIFJFQ09SRDsKK0JFR0lOCisg ICAgU0VMRUNUICd0cGxhaW4nLCBjb3VudCgqKSwgc3VtKGhhc2h0ZXh0KHQ6OnRleHQpKSBhcyB0 YWJsZWhhc2ggCisJICBJTlRPIHRoYXNoX3JlYworCSAgRlJPTSB0cGxhaW4gQVMgdDsKKyAgICBS QUlTRSBXQVJOSU5HICd0aGFzaCBhZnRlciBwYXJhbGxlbCBjaHVua2VkIHJlc3RvcmU6ICUnLCB0 aGFzaF9yZWM7CitFTkQ7CitcJFwkOworCX0pOworCiBkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDMu MAoK --00000000000069682f0648c252fb--