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 1w4lTq-002X9y-0i for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 20:02:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w4lTo-001xjK-0n for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 20:02:28 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w3dwO-007bbe-1i for pgsql-hackers@lists.postgresql.org; Fri, 20 Mar 2026 17:47:21 +0000 Received: from mail-yx1-xb133.google.com ([2607:f8b0:4864:20::b133]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w3dwM-00000000Cn0-128i for pgsql-hackers@postgresql.org; Fri, 20 Mar 2026 17:47:20 +0000 Received: by mail-yx1-xb133.google.com with SMTP id 956f58d0204a3-64caaacb9bcso1962164d50.1 for ; Fri, 20 Mar 2026 10:47:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774028837; cv=none; d=google.com; s=arc-20240605; b=DANVOhHekPltxbQ/ABGjRnkFV3C9Y3UT54hoeKXVW/beRw/YIS5IJY1VsGTk/sEFV5 X4JQM5bxRYllbK2ejb3LwEmL3+UioSKPvDagLUOy1zE/EjMkwn7Vapax+NUHBol5mxdJ i+cj4K7o2g0t5KKneuq0FAsmMzk+m3fPuWta0Rjfyw4XG75El7ek8IgTiMFWoZIODEZk biTIJ/cPlF680gUGnK+HA7c4XA5ZKCESS5p2JLxlzFgcymC6Bfrb93d/sqEj8I21bfSn V9Pio7AD1AyIPu2r0OL4L2qRUKlBsBnVr3mmdDfvVQ4tvnZHUOQ6CS+TA1eXvyd7Zfz5 Exnw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=rZSyhHYraOYgabvJ3o/H9368++y1Gjp1JyjLYMpt5Vk=; fh=33OU7BWuulPFH378PdKTnpeW+jw3IP20DTmpLDeQ3pE=; b=QF0NViDCPdMREhxsswub4QF7IvY7gpAveVpR16ArS2sgTNwf7xfMSg5cp4q+abak/+ GvZZCpEOoirNK6dy+u9JZPMoOQ4wffRe5BbGgFEdoBuWOiUs5r5J8l6kqSXdOwXgMKf0 wyLuFU4lYY+SS6qqnnb3G/eUMjMuftBmYU46Zl538yW8s25Y9QfVt/s6GApZo7CQ0E/S TDciVFza/++MhOWqBxVu7AjASw5FDmpsi/qBXrgaPXrf/gRlQMuYrs4/9V6hAvPN5XrC uDHAr9vP8DBOKxFetL30Nns2Tj2CoXfCWOLhPQs0Av9tXKQ57RVPMhZCkMG9q42NqOaL cmMQ==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pgedge.com; s=google; t=1774028837; x=1774633637; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=rZSyhHYraOYgabvJ3o/H9368++y1Gjp1JyjLYMpt5Vk=; b=SaVST59LvX6o5TjVNDcw+QsjzUKbfvcEU8UEzlSA8OBxls2YgZg4mekQJCl2HBYDdL 6UWh6dNpbYwSzjQyHibJDPwUTgHZ0tFNhfxZEafTUfnvmP8bL725T6RCAlNN6ktG92pV Yt7ft+svQy31ujA6zMv7g2Nn9jqC5/GN3hkrLD/PeRr9YVqFaNxgoZUXyMJj3lhT5OHj 1uDjVaaCgTQ/yOk1WMaDsSQMwdeVdDZA5Oj4vjcOaJ9OGPaF+HMILwFmtoibzIn7EKwt l+ZzpaxFyVwMRbZDfrMGSHrOiS1Q5+ZYB5XSUczZ8XI02rzoPDn2gMNtOHYexcvbVi4z XfBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774028837; x=1774633637; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=rZSyhHYraOYgabvJ3o/H9368++y1Gjp1JyjLYMpt5Vk=; b=DN7P9pbji94gPfy3FCOJXONVQrRT07rMOnol+4FM3hJGssnLyjDPwaEME/vR433i/C X1F/XD5jsWDE5g7eDaGCbKp50VuTDJFypMDO1LDusP/a5RDFCa5KpNQfyKDPY+u+Efne U5ZBlp8hlbvZWbQ4Um9SFR1Wo3JRzwo1jnfF47I+4K+AzqUxY+e1+2IRwfmki+7VXrCW OCIDwlcjTmdRAZ86pO2U7wzsN2kz73mpY7ufjqxExMzOoZUoeAHjIYmPdfFpo+NzA0vN k/LiWk7XnM9bvQtR2vsSawHD5O7wsPHlxNLayVe6yGPmI4P4wvwfIxO6+f9CzVVJGqQa 4kug== X-Gm-Message-State: AOJu0YwOH35wG5tsm5QAkZtHM8JvzaiU95acA8GuL3WMWuhXKzPFOC1l of8jmj0I7MslCGFdeFxT8kFR+5xcpkzFJeRh1sym8rNOk72+O7x8lcVwAflddnvnz6B3f/tUWVZ uCjMuWtLTvLCtrr45Q9CAqgJjADKyFBtAMl9X2/WEq6KXyRpUd3viz+E= X-Gm-Gg: ATEYQzz5rJBhqh7NwijawdArqr8ANjZO8kTBlF+uzRyV63NdnDl3r0F32JnKJIgtVgV /I0jtISjttkr+d3lGIkYAqJBTatyD+tjasqAQ+VH18EEOYdcvMpgtTHPcQOS1aOCppTHBmI9r2E 7U1gviupaIzwITYTKJ71E4YP1h6r0suniw5WeRUF/U/rGLEV8YdAw5a6LfC3Ho3rJB0qFmLPcxI jPOfKEDuT8F/exHtAZlCNnLZyvVGTqJ/4xNHi/Ezyf6wDKb0YAVKiql3rKBpRFMOVqeKp81ejoG Gyp7ETzDFJWK5VmUJ+/C5G4F0m3cEfXmwaWVEhI= X-Received: by 2002:a53:cc03:0:b0:64e:a1d0:1140 with SMTP id 956f58d0204a3-64eaa7edd68mr3283019d50.61.1774028837210; Fri, 20 Mar 2026 10:47:17 -0700 (PDT) MIME-Version: 1.0 From: Jimmy Angelakos Date: Fri, 20 Mar 2026 17:47:05 +0000 X-Gm-Features: AaiRm52_NWeK0Oj5BMlAalpYR6Cg9QWQ4k-y1wDaINv9pDHDECZ_yBeJPOChISA Message-ID: Subject: [PATCH] pg_dump: Restore extension config table data before user objects during pg_upgrade To: pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="000000000000aa0e18064d7846c8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000aa0e18064d7846c8 Content-Type: multipart/alternative; boundary="000000000000aa0e16064d7846c6" --000000000000aa0e16064d7846c6 Content-Type: text/plain; charset="UTF-8" Hi All, I ran into this issue when pg_upgrade-ing a DB with PostGIS. This is my first code patch, so any feedback on the approach will be appreciated! The problem: ============ pg_upgrade uses pg_dump --schema-only --binary-upgrade to copy the schema from $oldcluster to $newcluster. Because this excludes all table data, it leaves out data in extension config tables registered with pg_extension_config_dump(). In $newcluster, binary_upgrade_create_empty_extension() creates the extensions without populating any table data. The extensions' CREATE EXTENSION scripts never get executed so any INSERTs are skipped. As a consequence, if any CREATE TABLE statement in $newcluster requires validation against these empty config tables, the upgrade fails. As an example, PostGIS registers config table spatial_ref_sys to hold ~8500 spatial reference system definitions (SRIDs). When a table has, e.g. a geometry column that specifies an SRID, this gets validated during the CREATE TABLE: CREATE TABLE points (id int, location geometry(Point, 27700)); ERROR: Cannot find SRID (27700) in spatial_ref_sys This will happen for any SRID-constrained column, which will prevent many real-world PostGIS deployments from being able to pg_upgrade. To summarise the problem, our ordering is wrong here because extension configuration data must be present before user tables that depend on it get created, but --schema-only strips this data. The patch: ========== We are adding a new dump object type DO_EXTENSION_DATA that dumps extension config table data in SECTION_PRE_DATA during --binary-upgrade ONLY. This restores the needed data between extension creation and user object creation, allowing the DDL to succeed. Four files are modified in bin/pg_dump: pg_dump.h: Add DO_EXTENSION_DATA to the DumpableObjectType enum, between DO_EXTENSION and DO_TYPE pg_dump_sort.c: Add PRIO_EXTENSION_DATA between PRIO_EXTENSION and PRIO_TYPE pg_dump.c: 1. Add makeExtensionDataInfo() to create a TableDataInfo with objType = DO_EXTENSION_DATA. Called for plain tables (RELKIND_RELATION) during --binary-upgrade ONLY. As it depends on the table def, the COPY will be emitted after the CREATE TABLE. 2. Add dumpExtensionData() to emit the entry in SECTION_PRE_DATA with description "EXTENSION DATA" using dumpTableData_copy(). This allows the config table data to go into the schema-only dump. 3. In processExtensionTables(), when dopt->binary_upgrade is true, call makeExtensionDataInfo() instead of makeTableDataInfo(). Additionally, skip extcondition filter because we need to dump all rows here. 4. Include DO_EXTENSION_DATA in pre-data boundary in addBoundaryDependencies() pg_backup_archiver.c: Add "EXTENSION DATA" to the whitelist in _tocEntryRequired() similar to BLOB, BLOB METADATA, etc. to include extension config table data in --schema-only dumps during --binary-upgrade ONLY. What ends up happening: ======================= The inserted rows are basically scaffolding to allow the upgrade, and do not persist. The pg_upgrade sequence goes like: 1. pg_dump includes $oldcluster extension config data in schema-only dump 2. pg_restore replays the dump into $newcluster and "EXTENSION DATA" entries populate tables like spatial_ref_sys with COPY. Subsequent CREATE TABLEs with e.g. SRID-constrained columns pass validation. 3. pg_upgrade transfers all data files from $oldcluster to $newcluster, making spatial_ref_sys byte-for-byte identical to its previous state. This patch: 1. Does NOT affect normal pg_dumps (without --binary-upgrade). DO_EXTENSION_DATA objects are not created in this case. 2. Leaves binary_upgrade_create_empty_extension() unchanged. 3. Is not PostGIS-specific, and should solve this class of problem for any extension that registers config tables that will be needed for DDL validation. 4. Has been tested against HEAD at 29bf4ee7496 with $oldcluster PostGIS 3.3.9 on PG14 and $newcluster PostGIS 3.7.0dev/master on PG19-devel. Thanks in advance for your review! Please find attached the patch for HEAD. I believe this should be easily backpatchable to (at least) PG15, and will be happy to work on backports. Best regards, Jimmy --000000000000aa0e16064d7846c6 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi All,

I ran into this issue when pg_upgrade-ing a= DB with PostGIS. This is my first code patch, so any feedback on the appro= ach will be appreciated!

The problem:
=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D
pg_upgrade uses pg_dump --schema-only --binary-upgrade to copy= the schema from $oldcluster to $newcluster. Because this excludes all tabl= e data, it leaves out data in extension config tables registered with pg_ex= tension_config_dump().

In $newcluster, binary_upgrade_create_empty_e= xtension() creates the extensions without populating any table data. The ex= tensions' CREATE EXTENSION scripts never get executed so any INSERTs ar= e skipped. As a consequence, if any CREATE TABLE statement in $newcluster r= equires validation against these empty config tables, the upgrade fails. As= an example,
PostGIS registers config table spatial_ref_sys to hold ~850= 0 spatial reference system definitions (SRIDs). When a table has, e.g. a ge= ometry column that specifies an SRID, this gets validated during the CREATE= TABLE:

CREATE TABLE points (id int, location geometry(Point, 27700)= );
ERROR: =C2=A0Cannot find SRID (27700) in spatial_ref_sys

This = will happen for any SRID-constrained column, which will prevent many real-w= orld PostGIS deployments from being able to pg_upgrade. To summarise the pr= oblem, our ordering is wrong here because extension configuration data must= be present before user tables that depend on it get created, but --schema-= only strips this data.

The patch:
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<= br>We are adding a new dump object type DO_EXTENSION_DATA that dumps extens= ion config table data in SECTION_PRE_DATA during --binary-upgrade ONLY. Thi= s restores the needed data between extension creation and user object creat= ion, allowing the DDL to succeed.

Four files are modified in bin/pg_= dump:

pg_dump.h:
Add DO_EXTENSION_DATA to the DumpableObjectType = enum, between DO_EXTENSION and DO_TYPE

pg_dump_sort.c:
Add PRIO_E= XTENSION_DATA between PRIO_EXTENSION and PRIO_TYPE

pg_dump.c:
1. = Add makeExtensionDataInfo() to create a TableDataInfo with objType =3D DO_E= XTENSION_DATA. Called for plain tables (RELKIND_RELATION) during --binary-u= pgrade ONLY. As it depends on the table def, the COPY will be emitted after= the CREATE TABLE.
2. Add dumpExtensionData() to emit the entry in SECTI= ON_PRE_DATA with description "EXTENSION DATA" using dumpTableData= _copy(). This allows the config table data to go into the schema-only dump.=
3. In processExtensionTables(), when dopt->binary_upgrade is true, c= all makeExtensionDataInfo() instead of makeTableDataInfo(). Additionally, s= kip extcondition filter because we need to dump all rows here.
4. Includ= e DO_EXTENSION_DATA in pre-data boundary in addBoundaryDependencies()
pg_backup_archiver.c:
Add "EXTENSION DATA" to the whitelist = in _tocEntryRequired() similar to BLOB, BLOB METADATA, etc. to include exte= nsion config table data in --schema-only dumps during --binary-upgrade ONLY= .

What ends up happening:
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
The inserted rows are basically scaffoldi= ng to allow the upgrade, and do not persist. The pg_upgrade sequence goes l= ike:
1. pg_dump includes $oldcluster extension config data in schema-onl= y dump
2. pg_restore replays the dump into $newcluster and "EXTENSI= ON DATA" entries populate tables like spatial_ref_sys with COPY. Subse= quent CREATE TABLEs with e.g. SRID-constrained columns pass validation.
= 3. pg_upgrade transfers all data files from $oldcluster to $newcluster, mak= ing spatial_ref_sys byte-for-byte identical to its previous state.

T= his patch:
1. Does NOT affect normal pg_dumps (without --binary-upgrade)= . DO_EXTENSION_DATA objects are not created in this case.
2. Leaves bina= ry_upgrade_create_empty_extension() unchanged.
3. Is not PostGIS-specifi= c, and should solve this class of problem for any extension that registers = config tables that will be needed for DDL validation.
4. Has been tested= against HEAD at 29bf4ee7496 with $oldcluster PostGIS 3.3.9 on PG14 and $ne= wcluster PostGIS 3.7.0dev/master on PG19-devel.

Thanks in advance fo= r your review! Please find attached the patch for HEAD. I believe this shou= ld be easily backpatchable to (at least) PG15, and will be happy to work on= backports.

Best regards,
Jimmy
--000000000000aa0e16064d7846c6-- --000000000000aa0e18064d7846c8 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-pg_dump-Restore-extension-config-table-data-before-u.patch" Content-Disposition: attachment; filename="0001-pg_dump-Restore-extension-config-table-data-before-u.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmz6x8zm0 RnJvbSAyOTAxOWI4NjM4YjI4YTQ4N2I2NmM3YWQwMTg5M2EyZGU0MGZmNzlkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKaW1teSBBbmdlbGFrb3MgPGppbW15QHBnZWRnZS5jb20+CkRh dGU6IEZyaSwgMjAgTWFyIDIwMjYgMTY6MDQ6NDUgKzAwMDAKU3ViamVjdDogW1BBVENIXSBwZ19k dW1wOiBSZXN0b3JlIGV4dGVuc2lvbiBjb25maWcgdGFibGUgZGF0YSBiZWZvcmUgdXNlcgogb2Jq ZWN0cyBkdXJpbmcgYmluYXJ5IHVwZ3JhZGUKCnBnX3VwZ3JhZGUgdXNlcyBwZ19kdW1wIC0tc2No ZW1hLW9ubHkgLS1iaW5hcnktdXBncmFkZSwgd2hpY2ggZXhjbHVkZXMKYWxsIHRhYmxlIGRhdGEg aW5jbHVkaW5nIGV4dGVuc2lvbiBjb25maWd1cmF0aW9uIHRhYmxlcyByZWdpc3RlcmVkIHZpYQpw Z19leHRlbnNpb25fY29uZmlnX2R1bXAoKS4gU2luY2UgYmluYXJ5X3VwZ3JhZGVfY3JlYXRlX2Vt cHR5X2V4dGVuc2lvbigpCmRvZXMgbm90IHBvcHVsYXRlIHRoZXNlIHRhYmxlcywgYW55IHVzZXIg dGFibGUgd2hvc2UgQ1JFQVRFIFRBQkxFCnRyaWdnZXJzIHZhbGlkYXRpb24gYWdhaW5zdCBjb25m aWcgZGF0YSB3aWxsIGZhaWwuCgpGb3IgZXhhbXBsZSwgUG9zdEdJUyB0YWJsZXMgd2l0aCBTUklE LWNvbnN0cmFpbmVkIGdlb21ldHJ5L2dlb2dyYXBoeQpjb2x1bW5zIGZhaWwgYmVjYXVzZSBzcGF0 aWFsX3JlZl9zeXMgaXMgZW1wdHkgZHVyaW5nIHNjaGVtYSByZXN0b3JlLgoKRml4IGJ5IGludHJv ZHVjaW5nIGEgbmV3IGR1bXAgb2JqZWN0IHR5cGUgRE9fRVhURU5TSU9OX0RBVEEgdGhhdCBkdW1w cwpleHRlbnNpb24gY29uZmlnIHRhYmxlIGRhdGEgaW50byBTRUNUSU9OX1BSRV9EQVRBIGR1cmlu ZyBiaW5hcnkgdXBncmFkZS4KVGhpcyBwdXRzIHRoZSBkYXRhIHJlc3RvcmUgYmV0d2VlbiBleHRl bnNpb24gY3JlYXRpb24gYW5kIHVzZXIgb2JqZWN0CmNyZWF0aW9uLCBhbGxvd2luZyBEREwtdGlt ZSB2YWxpZGF0aW9uIHRvIHN1Y2NlZWQuIFRoZSBkYXRhIGlzCnNjYWZmb2xkaW5nOiBpdCBpcyBv dmVyd3JpdHRlbiB3aGVuIHBnX3VwZ3JhZGUgdHJhbnNmZXJzIHRoZSBvbGQKY2x1c3RlcidzIGRh dGEgZmlsZXMgdG8gdGhlIG5ldyBjbHVzdGVyLgoKVGhpcyBpcyBub3QgUG9zdEdJUy1zcGVjaWZp YyBhbmQgYXBwbGllcyB0byBhbnkgZXh0ZW5zaW9uIHRoYXQgcmVnaXN0ZXJzCmNvbmZpZyB0YWJs ZXMgdmlhIHBnX2V4dGVuc2lvbl9jb25maWdfZHVtcCgpIHdoZXJlIHRoYXQgZGF0YSBpcyBuZWVk ZWQKZm9yIERETC10aW1lIHZhbGlkYXRpb24uCi0tLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9hcmNoaXZlci5jIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAg ICB8IDEwOSArKysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmggICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcF9zb3J0LmMg ICAgICAgfCAgIDcgKysKIDQgZmlsZXMgY2hhbmdlZCwgMTE3IGluc2VydGlvbnMoKyksIDIgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZl ci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IDI3MWEyYzNl NDgxLi5jOWY5ZTU3NGYxNiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAt MzMwOSw2ICszMzA5LDcgQEAgX3RvY0VudHJ5UmVxdWlyZWQoVG9jRW50cnkgKnRlLCB0ZVNlY3Rp b24gY3VyU2VjdGlvbiwgQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCSAqLwogCQlpZiAoc3RyY21wKHRl LT5kZXNjLCAiU0VRVUVOQ0UgU0VUIikgPT0gMCB8fAogCQkJc3RyY21wKHRlLT5kZXNjLCAiQkxP QiIpID09IDAgfHwKKwkJCXN0cmNtcCh0ZS0+ZGVzYywgIkVYVEVOU0lPTiBEQVRBIikgPT0gMCB8 fAogCQkJc3RyY21wKHRlLT5kZXNjLCAiQkxPQiBNRVRBREFUQSIpID09IDAgfHwKIAkJCShzdHJj bXAodGUtPmRlc2MsICJBQ0wiKSA9PSAwICYmCiAJCQkgc3RybmNtcCh0ZS0+dGFnLCAiTEFSR0Ug T0JKRUNUIiwgMTIpID09IDApIHx8CkBAIC0zMzUwLDYgKzMzNTEsNyBAQCBfdG9jRW50cnlSZXF1 aXJlZChUb2NFbnRyeSAqdGUsIHRlU2VjdGlvbiBjdXJTZWN0aW9uLCBBcmNoaXZlSGFuZGxlICpB SCkKIAkJaWYgKCEocm9wdC0+c2VxdWVuY2VfZGF0YSAmJiBzdHJjbXAodGUtPmRlc2MsICJTRVFV RU5DRSBTRVQiKSA9PSAwKSAmJgogCQkJIShyb3B0LT5iaW5hcnlfdXBncmFkZSAmJgogCQkJICAo c3RyY21wKHRlLT5kZXNjLCAiQkxPQiIpID09IDAgfHwKKwkJCSAgIHN0cmNtcCh0ZS0+ZGVzYywg IkVYVEVOU0lPTiBEQVRBIikgPT0gMCB8fAogCQkJICAgc3RyY21wKHRlLT5kZXNjLCAiQkxPQiBN RVRBREFUQSIpID09IDAgfHwKIAkJCSAgIChzdHJjbXAodGUtPmRlc2MsICJBQ0wiKSA9PSAwICYm CiAJCQkJc3RybmNtcCh0ZS0+dGFnLCAiTEFSR0UgT0JKRUNUIiwgMTIpID09IDApIHx8CmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuYwppbmRleCBhZDA5Njc3YzMzNi4uMmZmYjhlYjg2M2YgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtMjY0 LDYgKzI2NCw3IEBAIHN0YXRpYyB2b2lkIHByb2hpYml0X2Nyb3NzZGJfcmVmcyhQR2Nvbm4gKmNv bm4sIGNvbnN0IGNoYXIgKmRibmFtZSwKIHN0YXRpYyBOYW1lc3BhY2VJbmZvICpmaW5kTmFtZXNw YWNlKE9pZCBuc29pZCk7CiBzdGF0aWMgdm9pZCBkdW1wVGFibGVEYXRhKEFyY2hpdmUgKmZvdXQs IGNvbnN0IFRhYmxlRGF0YUluZm8gKnRkaW5mbyk7CiBzdGF0aWMgdm9pZCByZWZyZXNoTWF0Vmll d0RhdGEoQXJjaGl2ZSAqZm91dCwgY29uc3QgVGFibGVEYXRhSW5mbyAqdGRpbmZvKTsKK3N0YXRp YyB2b2lkIGR1bXBFeHRlbnNpb25EYXRhKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFRhYmxlRGF0YUlu Zm8gKnRkaW5mbyk7CiBzdGF0aWMgY29uc3QgY2hhciAqZ2V0Um9sZU5hbWUoY29uc3QgY2hhciAq cm9sZW9pZF9zdHIpOwogc3RhdGljIHZvaWQgY29sbGVjdFJvbGVOYW1lcyhBcmNoaXZlICpmb3V0 KTsKIHN0YXRpYyB2b2lkIGdldEFkZGl0aW9uYWxBQ0xzKEFyY2hpdmUgKmZvdXQpOwpAQCAtMzUy LDYgKzM1Myw3IEBAIHN0YXRpYyB2b2lkIGFkZENvbnN0ckNoaWxkSWR4RGVwcyhEdW1wYWJsZU9i amVjdCAqZG9iaiwgY29uc3QgSW5keEluZm8gKnJlZmlkeCk7CiBzdGF0aWMgdm9pZCBnZXREb21h aW5Db25zdHJhaW50cyhBcmNoaXZlICpmb3V0LCBUeXBlSW5mbyAqdHlpbmZvKTsKIHN0YXRpYyB2 b2lkIGdldFRhYmxlRGF0YShEdW1wT3B0aW9ucyAqZG9wdCwgVGFibGVJbmZvICp0YmxpbmZvLCBp bnQgbnVtVGFibGVzLCBjaGFyIHJlbGtpbmQpOwogc3RhdGljIHZvaWQgbWFrZVRhYmxlRGF0YUlu Zm8oRHVtcE9wdGlvbnMgKmRvcHQsIFRhYmxlSW5mbyAqdGJpbmZvKTsKK3N0YXRpYyB2b2lkIG1h a2VFeHRlbnNpb25EYXRhSW5mbyhEdW1wT3B0aW9ucyAqZG9wdCwgVGFibGVJbmZvICp0YmluZm8p Owogc3RhdGljIHZvaWQgYnVpbGRNYXRWaWV3UmVmcmVzaERlcGVuZGVuY2llcyhBcmNoaXZlICpm b3V0KTsKIHN0YXRpYyB2b2lkIGdldFRhYmxlRGF0YUZLQ29uc3RyYWludHModm9pZCk7CiBzdGF0 aWMgdm9pZCBkZXRlcm1pbmVOb3ROdWxsRmxhZ3MoQXJjaGl2ZSAqZm91dCwgUEdyZXN1bHQgKnJl cywgaW50IHIsCkBAIC0yOTYxLDYgKzI5NjMsNDggQEAgZHVtcFRhYmxlRGF0YShBcmNoaXZlICpm b3V0LCBjb25zdCBUYWJsZURhdGFJbmZvICp0ZGluZm8pCiAJZGVzdHJveVBRRXhwQnVmZmVyKGNs aXN0QnVmKTsKIH0KIAorLyoKKyAqIGR1bXBFeHRlbnNpb25EYXRhIC0KKyAqCSAgZHVtcCBleHRl bnNpb24gY29uZmlndXJhdGlvbiB0YWJsZSBkYXRhIGZvciBiaW5hcnkgdXBncmFkZQorICoKKyAq IEVudHJ5IGdvZXMgaW50byBTRUNUSU9OX1BSRV9EQVRBIHNvIHRoZSBkYXRhIGlzIGF2YWlsYWJs ZSBiZWZvcmUKKyAqIHVzZXIgdGFibGVzIHRoYXQgbWF5IG5lZWQgaXQgZm9yIHZhbGlkYXRpb24u CisgKi8KK3N0YXRpYyB2b2lkCitkdW1wRXh0ZW5zaW9uRGF0YShBcmNoaXZlICpmb3V0LCBjb25z dCBUYWJsZURhdGFJbmZvICp0ZGluZm8pCit7CisJVGFibGVJbmZvICAqdGJpbmZvID0gdGRpbmZv LT50ZHRhYmxlOworCVBRRXhwQnVmZmVyIGNvcHlCdWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwor CVBRRXhwQnVmZmVyIGNsaXN0QnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCS8qIENoZWNr IHRoYXQgd2UgaGF2ZSBwZXItY29sdW1uIGRldGFpbHMgYWJvdXQgdGhpcyB0YWJsZSAqLworCUFz c2VydCh0YmluZm8tPmludGVyZXN0aW5nKTsKKworCS8qIEJ1aWxkIENPUFkgc3RhdGVtZW50ICov CisJcHJpbnRmUFFFeHBCdWZmZXIoY29weUJ1ZiwgIkNPUFkgJXMgIiwKKwkJCQkJICBmbXRRdWFs aWZpZWREdW1wYWJsZSh0YmluZm8pKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlcihjb3B5QnVmLCAiJXMg RlJPTSBzdGRpbjtcbiIsCisJCQkJCSAgZm10Q29weUNvbHVtbkxpc3QodGJpbmZvLCBjbGlzdEJ1 ZikpOworCisJaWYgKHRkaW5mby0+ZG9iai5kdW1wICYgRFVNUF9DT01QT05FTlRfREFUQSkKKwl7 CisJCUFyY2hpdmVFbnRyeShmb3V0LCB0ZGluZm8tPmRvYmouY2F0SWQsIHRkaW5mby0+ZG9iai5k dW1wSWQsCisJCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9IHRiaW5mby0+ZG9iai5uYW1lLAorCQkJ CQkJCQkgIC5uYW1lc3BhY2UgPSB0YmluZm8tPmRvYmoubmFtZXNwYWNlLT5kb2JqLm5hbWUsCisJ CQkJCQkJCSAgLm93bmVyID0gdGJpbmZvLT5yb2xuYW1lLAorCQkJCQkJCQkgIC5kZXNjcmlwdGlv biA9ICJFWFRFTlNJT04gREFUQSIsCisJCQkJCQkJCSAgLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9E QVRBLAorCQkJCQkJCQkgIC5jb3B5U3RtdCA9IGNvcHlCdWYtPmRhdGEsCisJCQkJCQkJCSAgLmRl cHMgPSAmKHRiaW5mby0+ZG9iai5kdW1wSWQpLAorCQkJCQkJCQkgIC5uRGVwcyA9IDEsCisJCQkJ CQkJCSAgLmR1bXBGbiA9IGR1bXBUYWJsZURhdGFfY29weSwKKwkJCQkJCQkJICAuZHVtcEFyZyA9 IHRkaW5mbykpOworCX0KKworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihjb3B5QnVmKTsKKwlkZXN0cm95 UFFFeHBCdWZmZXIoY2xpc3RCdWYpOworfQorCiAvKgogICogcmVmcmVzaE1hdFZpZXdEYXRhIC0K ICAqCSAgbG9hZCBvciByZWZyZXNoIHRoZSBjb250ZW50cyBvZiBhIHNpbmdsZSBtYXRlcmlhbGl6 ZWQgdmlldwpAQCAtMzEwNSw2ICszMTQ5LDQ4IEBAIG1ha2VUYWJsZURhdGFJbmZvKER1bXBPcHRp b25zICpkb3B0LCBUYWJsZUluZm8gKnRiaW5mbykKIAl0YmluZm8tPmludGVyZXN0aW5nID0gdHJ1 ZTsKIH0KIAorLyoKKyAqIG1ha2VFeHRlbnNpb25EYXRhSW5mbyAtLS0gY3JlYXRlIFRhYmxlRGF0 YUluZm8gZm9yIGV4dGVuc2lvbiBjb25maWcgdGFibGUKKyAqCisgKiBUaGlzIGlzIHVzZWQgZHVy aW5nIGJpbmFyeSB1cGdyYWRlcyB0byBlbnN1cmUgZXh0ZW5zaW9uIGNvbmZpZ3VyYXRpb24KKyAq IHRhYmxlIGRhdGEgaXMgZHVtcGVkIGVhcmx5IChiZWZvcmUgdXNlciB0YWJsZXMgdGhhdCBtYXkg ZGVwZW5kIG9uIGl0KS4KKyAqIEZvciBleGFtcGxlLCBQb3N0R0lTJ3Mgc3BhdGlhbF9yZWZfc3lz IG11c3QgYmUgcG9wdWxhdGVkIGJlZm9yZSBhbnkKKyAqIHRhYmxlIHdpdGggZ2VvZ3JhcGh5KFBv aW50LCA0MjgzKSBjYW4gYmUgY3JlYXRlZCBkdWUgdG8gU1JJRCB2YWxpZGF0aW9uLgorICovCitz dGF0aWMgdm9pZAorbWFrZUV4dGVuc2lvbkRhdGFJbmZvKER1bXBPcHRpb25zICpkb3B0LCBUYWJs ZUluZm8gKnRiaW5mbykKK3sKKwlUYWJsZURhdGFJbmZvICp0ZGluZm87CisKKwkvKiBBbHJlYWR5 IGhhdmUgYSBkYXRhIG9iamVjdD8gKi8KKwlpZiAodGJpbmZvLT5kYXRhT2JqICE9IE5VTEwpCisJ CXJldHVybjsKKworCS8qCisJICogQ2FsbGVyIGVuc3VyZXMgdGhhdCB0aGlzIGlzIG9ubHkgY2Fs bGVkIGZvciBSRUxLSU5EX1JFTEFUSU9OLgorCSAqLworCisJLyogT0ssIGNyZWF0ZSB0aGUgZGF0 YSBvYmplY3QgKi8KKwl0ZGluZm8gPSAoVGFibGVEYXRhSW5mbyAqKSBwZ19tYWxsb2Moc2l6ZW9m KFRhYmxlRGF0YUluZm8pKTsKKworCXRkaW5mby0+ZG9iai5vYmpUeXBlID0gRE9fRVhURU5TSU9O X0RBVEE7CisKKwl0ZGluZm8tPmRvYmouY2F0SWQudGFibGVvaWQgPSAwOworCXRkaW5mby0+ZG9i ai5jYXRJZC5vaWQgPSB0YmluZm8tPmRvYmouY2F0SWQub2lkOworCUFzc2lnbkR1bXBJZCgmdGRp bmZvLT5kb2JqKTsKKwl0ZGluZm8tPmRvYmoubmFtZSA9IHRiaW5mby0+ZG9iai5uYW1lOworCXRk aW5mby0+ZG9iai5uYW1lc3BhY2UgPSB0YmluZm8tPmRvYmoubmFtZXNwYWNlOworCXRkaW5mby0+ dGR0YWJsZSA9IHRiaW5mbzsKKwl0ZGluZm8tPmZpbHRlcmNvbmQgPSBOVUxMOworCWFkZE9iamVj dERlcGVuZGVuY3koJnRkaW5mby0+ZG9iaiwgdGJpbmZvLT5kb2JqLmR1bXBJZCk7CisKKwkvKiBN YXJrIHRoYXQgdGhpcyBvYmplY3QgY29udGFpbnMgZGF0YSAqLworCXRkaW5mby0+ZG9iai5jb21w b25lbnRzIHw9IERVTVBfQ09NUE9ORU5UX0RBVEE7CisKKwl0YmluZm8tPmRhdGFPYmogPSB0ZGlu Zm87CisJdGJpbmZvLT5pbnRlcmVzdGluZyA9IHRydWU7Cit9CisKIC8qCiAgKiBUaGUgcmVmcmVz aCBmb3IgYSBtYXRlcmlhbGl6ZWQgdmlldyBtdXN0IGJlIGRlcGVuZGVudCBvbiB0aGUgcmVmcmVz aCBmb3IKICAqIGFueSBtYXRlcmlhbGl6ZWQgdmlldyB0aGF0IHRoaXMgb25lIGlzIGRlcGVuZGVu dCBvbi4KQEAgLTExODI4LDYgKzExOTE0LDkgQEAgZHVtcER1bXBhYmxlT2JqZWN0KEFyY2hpdmUg KmZvdXQsIER1bXBhYmxlT2JqZWN0ICpkb2JqKQogCQljYXNlIERPX0VYVEVOU0lPTjoKIAkJCWR1 bXBFeHRlbnNpb24oZm91dCwgKGNvbnN0IEV4dGVuc2lvbkluZm8gKikgZG9iaik7CiAJCQlicmVh azsKKwkJY2FzZSBET19FWFRFTlNJT05fREFUQToKKwkJCWR1bXBFeHRlbnNpb25EYXRhKGZvdXQs IChjb25zdCBUYWJsZURhdGFJbmZvICopIGRvYmopOworCQkJYnJlYWs7CiAJCWNhc2UgRE9fVFlQ RToKIAkJCWR1bXBUeXBlKGZvdXQsIChjb25zdCBUeXBlSW5mbyAqKSBkb2JqKTsKIAkJCWJyZWFr OwpAQCAtMjAzODAsMTAgKzIwNDY5LDI1IEBAIHByb2Nlc3NFeHRlbnNpb25UYWJsZXMoQXJjaGl2 ZSAqZm91dCwgRXh0ZW5zaW9uSW5mbyBleHRpbmZvW10sCiAKIAkJCQlpZiAoZHVtcG9iaikKIAkJ CQl7Ci0JCQkJCW1ha2VUYWJsZURhdGFJbmZvKGRvcHQsIGNvbmZpZ3RibCk7CisJCQkJCS8qCisJ CQkJCSAqIEZvciBiaW5hcnkgdXBncmFkZXMsIGR1bXAgZXh0ZW5zaW9uIGNvbmZpZyB0YWJsZSBk YXRhCisJCQkJCSAqIGJlZm9yZSB1c2VyIHRhYmxlcyBhcmUgY3JlYXRlZCBzbyBpdCdzIGF2YWls YWJsZSBmb3IKKwkJCQkJICogdmFsaWRhdGlvbiAoZS5nLiBQb3N0R0lTIFNSSURzKS4KKwkJCQkJ ICovCisJCQkJCWlmIChkb3B0LT5iaW5hcnlfdXBncmFkZSAmJgorCQkJCQkJY29uZmlndGJsLT5y ZWxraW5kID09IFJFTEtJTkRfUkVMQVRJT04pCisJCQkJCQltYWtlRXh0ZW5zaW9uRGF0YUluZm8o ZG9wdCwgY29uZmlndGJsKTsKKwkJCQkJZWxzZQorCQkJCQkJbWFrZVRhYmxlRGF0YUluZm8oZG9w dCwgY29uZmlndGJsKTsKIAkJCQkJaWYgKGNvbmZpZ3RibC0+ZGF0YU9iaiAhPSBOVUxMKQogCQkJ CQl7Ci0JCQkJCQlpZiAoc3RybGVuKGV4dGNvbmRpdGlvbmFycmF5W2pdKSA+IDApCisJCQkJCQkv KgorCQkJCQkJICogRm9yIGJpbmFyeSB1cGdyYWRlIChET19FWFRFTlNJT05fREFUQSksIGRvbid0 IGFwcGx5CisJCQkJCQkgKiB0aGUgZmlsdGVyIGNvbmRpdGlvbiAtIHdlIG5lZWQgQUxMIGRhdGEg c2luY2UgdGhlCisJCQkJCQkgKiBleHRlbnNpb24gd29uJ3QgcG9wdWxhdGUgYnVpbHQtaW4gZGF0 YSBpbiBiaW5hcnkKKwkJCQkJCSAqIHVwZ3JhZGUgbW9kZS4KKwkJCQkJCSAqLworCQkJCQkJaWYg KHN0cmxlbihleHRjb25kaXRpb25hcnJheVtqXSkgPiAwICYmICFkb3B0LT5iaW5hcnlfdXBncmFk ZSkKIAkJCQkJCQljb25maWd0YmwtPmRhdGFPYmotPmZpbHRlcmNvbmQgPSBwZ19zdHJkdXAoZXh0 Y29uZGl0aW9uYXJyYXlbal0pOwogCQkJCQl9CiAJCQkJfQpAQCAtMjA2NjEsNiArMjA3NjUsNyBA QCBhZGRCb3VuZGFyeURlcGVuZGVuY2llcyhEdW1wYWJsZU9iamVjdCAqKmRvYmpzLCBpbnQgbnVt T2JqcywKIAkJewogCQkJY2FzZSBET19OQU1FU1BBQ0U6CiAJCQljYXNlIERPX0VYVEVOU0lPTjoK KwkJCWNhc2UgRE9fRVhURU5TSU9OX0RBVEE6CiAJCQljYXNlIERPX1RZUEU6CiAJCQljYXNlIERP X1NIRUxMX1RZUEU6CiAJCQljYXNlIERPX0ZVTkM6CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAppbmRleCAyYjljMDFiMmMw YS4uMTg1Mzk2YTAxYTQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaApAQCAtNDAsNiArNDAsNyBAQCB0eXBlZGVmIGVu dW0KIAkvKiBXaGVuIG1vZGlmeWluZyB0aGlzIGVudW0sIHVwZGF0ZSBwcmlvcml0eSB0YWJsZXMg aW4gcGdfZHVtcF9zb3J0LmMhICovCiAJRE9fTkFNRVNQQUNFLAogCURPX0VYVEVOU0lPTiwKKwlE T19FWFRFTlNJT05fREFUQSwJCQkvKiBleHRlbnNpb24gY29uZmlnIHRhYmxlIGRhdGEgZm9yIGJp bmFyeSB1cGdyYWRlICovCiAJRE9fVFlQRSwKIAlET19TSEVMTF9UWVBFLAogCURPX0ZVTkMsCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcF9zb3J0LmMgYi9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcF9zb3J0LmMKaW5kZXggMDNlNWMxYzExMTYuLjNjY2VkOWMyN2JlIDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcF9zb3J0LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXBfc29ydC5jCkBAIC01OCw2ICs1OCw3IEBAIGVudW0gZGJPYmplY3RUeXBlUHJpb3Jp dGllcwogCVBSSU9fQ09MTEFUSU9OLAogCVBSSU9fVFJBTlNGT1JNLAogCVBSSU9fRVhURU5TSU9O LAorCVBSSU9fRVhURU5TSU9OX0RBVEEsCQkvKiBleHQgY29uZmlnIGRhdGE6IHVzZWQgZm9yIGJp bmFyeSB1cGdyYWRlICovCiAJUFJJT19UWVBFLAkJCQkJLyogdXNlZCBmb3IgRE9fVFlQRSBhbmQg RE9fU0hFTExfVFlQRSAqLwogCVBSSU9fQ0FTVCwKIAlQUklPX0ZVTkMsCkBAIC0xMDYsNiArMTA3 LDcgQEAgc3RhdGljIGNvbnN0IGludCBkYk9iamVjdFR5cGVQcmlvcml0eVtdID0KIHsKIAlbRE9f TkFNRVNQQUNFXSA9IFBSSU9fTkFNRVNQQUNFLAogCVtET19FWFRFTlNJT05dID0gUFJJT19FWFRF TlNJT04sCisJW0RPX0VYVEVOU0lPTl9EQVRBXSA9IFBSSU9fRVhURU5TSU9OX0RBVEEsCiAJW0RP X1RZUEVdID0gUFJJT19UWVBFLAogCVtET19TSEVMTF9UWVBFXSA9IFBSSU9fVFlQRSwKIAlbRE9f RlVOQ10gPSBQUklPX0ZVTkMsCkBAIC0xNTI1LDYgKzE1MjcsMTEgQEAgZGVzY3JpYmVEdW1wYWJs ZU9iamVjdChEdW1wYWJsZU9iamVjdCAqb2JqLCBjaGFyICpidWYsIGludCBidWZzaXplKQogCQkJ CQkgIkVYVEVOU0lPTiAlcyAgKElEICVkIE9JRCAldSkiLAogCQkJCQkgb2JqLT5uYW1lLCBvYmot PmR1bXBJZCwgb2JqLT5jYXRJZC5vaWQpOwogCQkJcmV0dXJuOworCQljYXNlIERPX0VYVEVOU0lP Tl9EQVRBOgorCQkJc25wcmludGYoYnVmLCBidWZzaXplLAorCQkJCQkgIkVYVEVOU0lPTiBEQVRB ICVzICAoSUQgJWQgT0lEICV1KSIsCisJCQkJCSBvYmotPm5hbWUsIG9iai0+ZHVtcElkLCBvYmot PmNhdElkLm9pZCk7CisJCQlyZXR1cm47CiAJCWNhc2UgRE9fVFlQRToKIAkJCXNucHJpbnRmKGJ1 ZiwgYnVmc2l6ZSwKIAkJCQkJICJUWVBFICVzICAoSUQgJWQgT0lEICV1KSIsCi0tIAoyLjUxLjAK Cg== --000000000000aa0e18064d7846c8--