Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vIMvP-006DK4-8c for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Nov 2025 08:06:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vIMvN-00Eouq-Vg for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Nov 2025 08:06:53 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vIMvN-00Eoui-Dj for pgsql-hackers@lists.postgresql.org; Mon, 10 Nov 2025 08:06:53 +0000 Received: from mail-lf1-x131.google.com ([2a00:1450:4864:20::131]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vIMvK-006L3V-38 for pgsql-hackers@lists.postgresql.org; Mon, 10 Nov 2025 08:06:52 +0000 Received: by mail-lf1-x131.google.com with SMTP id 2adb3069b0e04-5943d1d6471so2675485e87.0 for ; Mon, 10 Nov 2025 00:06:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762762009; x=1763366809; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=K4eQFsj/yUJGLFF5aJqLCEQczZNnVCsjNpmiyNIIMms=; b=FnObJkJfc3haxQ5Cll0dQWWSj9UPBGrwHN9DKPQYXwoHRRu1dku2eDA69wSq4f/6QQ DIuQ4C0HDnE1UGjIvCnr4dkZVsWJm/9OJnQsSki/j9JqNYqcql/4PFHusg6ZgBNfiZYr luECNEXLJZk2An51oeWLO73iuRzTKFQoNRwbswMmd0V4gqMo4AiwXpaIcvV3waQUjsKp MKEqXFIevETR4RGivV8SY9dc3UeUkXEX2e0tXIQpoNvNYbPPxlUEAdtdxRKisSN3TmnN OqJBI+2YGLp4ksKxn4M+Jz/S6H73vR2fYORp+yDSBeiIXnrR1mhbQ+9aCUv+0Zq+iJS5 g7dA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762762009; x=1763366809; 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=K4eQFsj/yUJGLFF5aJqLCEQczZNnVCsjNpmiyNIIMms=; b=WFdzBj6MEhb1+VQyCgB4SBNSws9nSHbH6HyShocKFR+VYiB6hELGC0thXPqzMcgKUh 3EHqEBgbaXIeEJTmJZU3OtZFUZQLn2fGy1VcijSekv9zJLkab3c+vYRXMMAnHsmN4L6Z 5u0Zt9W+rvVMq0yxPMlUx8CRcrXRe4I7PUann1eNzw17zWiAkpXVXG1ilL/DPYLPLotE 7ADJMYHl0ZgZFvb2a1ZcvMRU6IjtP73Xe2uBl4+Wy8375O3IV2E8uR1J15G3MSldu8A1 UTjOv1MHslbIPgzjkjzA/hPX/c3vHA9sTN+RNO59iyepUc801x8jK1aa13fwKW86hHsJ z3og== X-Gm-Message-State: AOJu0Yy0ot+u04dqS9b1QvkxVbJDtskD5ERsqkmD88GEPjmavLyte3nR eezyJ6GbVCOIGlYbs7iDysd6trtYkXgBfESIHUxp3n1Oeabqr2k11SrJXc+Xk29IZIPIQBt1pWa OEkaqgloUGb/FpNwMbFOY95k1S2hqz8rAltnVd9QOXQ== X-Gm-Gg: ASbGncvhHU/k/4vLvo3vlWG241LV3f0JxsQQwNXz5zz85tLK4CEF31ZspnrTLyS79D1 Azx1Q/bhlRyzqb8NmXOv3oZ74NIBDzwZwA+caOIX5MAC7jmsZTs2rSElepfFtyCpjiGWXxqnpBp h7YEEDVhErnvdn6m0KEamG4izWwPXhW0tfw+QEBF8y4JOZRXCespvqa4+puR31DVxEsvFJhSfUi Unb9SrFdsHViDb4B4Xw7jI2MbeXeDjQ1yZ/jrHy6GHMjSrxrxwDavHqIP379g== X-Google-Smtp-Source: AGHT+IGRbyIXrUxlZwhBtY1+62AGejXxmiCCbBfO7JZWwE2KA6nVQJrRVvt4HyVhABAE+5asTHNWUJ7DL4Wm/D2CjH4= X-Received: by 2002:a05:6512:238f:b0:594:3567:e835 with SMTP id 2adb3069b0e04-5945f1c0a19mr1959260e87.35.1762762008734; Mon, 10 Nov 2025 00:06:48 -0800 (PST) MIME-Version: 1.0 From: Chao Li Date: Mon, 10 Nov 2025 16:06:36 +0800 X-Gm-Features: AWmQ_bl3OEuLR2BEuZM65t_kDn_aEhIajKVyexQftyAXSTTYcEfVvcBg4pWRess Message-ID: Subject: Improve logical replication usability when tables lack primary keys To: Postgres hackers Content-Type: multipart/mixed; boundary="0000000000005ac3c5064339034c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005ac3c5064339034c Content-Type: multipart/alternative; boundary="0000000000005ac3c3064339034a" --0000000000005ac3c3064339034a Content-Type: text/plain; charset="UTF-8" * BACKGROUND This requirement comes from several users operating large deployments, particularly in HIS (Hospital Information Systems). The situation can be summarized as follows: - A central DB operations team maintains the main database and configures logical replication for all tables. - Multiple third-party application vendors are allowed to create new tables in that database. - Some of these newly created tables lack a primary key. Since logical replication with `REPLICATION IDENTITY DEFAULT` requires a primary key, such tables silently fail to replicate. - The DB operations team must then spend significant effort identifying the affected tables and correcting them manually. In practice, these environments would benefit from a safe fallback: if a table has no primary key, logical replication should automatically switch from `REPLICATION IDENTITY DEFAULT` to `FULL`, ensuring replication continues rather than breaking. I don't intend to debate whether this operational model is ideal; it is simply the reality in many deployments. These database operations teams have developed and refined their practices over many years, and as a database vendor we have limited influence over how they manage their environments. * PROPOSED SOLUTION I evaluated a few approaches and am proposing the following: - Introduce a new GUC: `logical_replication_fallback_to_full_identity`. - When enabled, if a table being logically replicated has no primary key, the system automatically uses `REPLICATION IDENTITY FULL` for that table. - This setting can be applied at the database level, so large systems do not need to enable it cluster-wide unless desired. - When the WAL sender transmits relation metadata, if fallback has occurred, it explicitly reports `FULL` as the replication identity to the subscriber, so there is limited impact on the subscriber. * NEXT STEPS The attached patch is an initial implementation. It does not yet include tests or documentation updates. I would appreciate feedback on the design approach first. If the direction seems reasonable, I will proceed with refining the patch and adding documentation and tests. Thanks in advance for your review. Best regards, -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/ --0000000000005ac3c3064339034a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
<= div>* BACKGROUND

This requirement comes from sever= al users operating large deployments, particularly in HIS (Hospital Informa= tion Systems). The situation can be summarized as follows:

- A central DB operations team maintains the main database and con= figures logical replication for all tables.
- Multiple third-part= y application vendors are allowed to create new tables in that database.
- Some of these newly created tables lack a primary key. Since logi= cal replication with `REPLICATION IDENTITY DEFAULT` requires a primary key,= such tables silently fail to replicate.
- The DB operations team= must then spend significant effort identifying the affected tables and cor= recting them manually.

In practice, these environm= ents would benefit from a safe fallback: if a table has no primary key, log= ical replication should automatically switch from `REPLICATION IDENTITY DEF= AULT` to `FULL`, ensuring replication continues rather than breaking.
=

I don't intend to debate whether this operational m= odel is ideal; it is simply the reality in many deployments. These database= operations teams have developed and refined their practices over many year= s, and as a database vendor we have limited influence over how they manage = their environments.

* PROPOSED SOLUTION
<= div>
I evaluated a few approaches and am proposing the follow= ing:

- Introduce a new GUC: `logical_replication_f= allback_to_full_identity`.
- When enabled, if a table being logic= ally replicated has no primary key, the system automatically uses `REPLICAT= ION IDENTITY FULL` for that table.
- This setting can be applied = at the database level, so large systems do not need to enable it cluster-wi= de unless desired.
- When the WAL sender transmits relation metad= ata, if fallback has occurred, it explicitly reports `FULL` as the replicat= ion identity to the subscriber, so there is limited impact on the subscribe= r.

* NEXT STEPS

The attac= hed patch is an initial implementation. It does not yet include tests or do= cumentation updates. I would appreciate feedback on the design approach fir= st. If the direction seems reasonable, I will proceed with refining the pat= ch and adding documentation and tests.

Thanks in a= dvance for your review.

Best regards,
--
C= hao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/




--0000000000005ac3c3064339034a-- --0000000000005ac3c5064339034c Content-Type: application/octet-stream; name="v1-0001-Fallback-default-replication-identity-to-full.patch" Content-Disposition: attachment; filename="v1-0001-Fallback-default-replication-identity-to-full.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhsunw3j0 RnJvbSA3OTE2OWE1MGE1M2RhOTNlYTVkMmJhMDMyMzlhODg0YjRkNjYwMTU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiQ2hhbyBMaSAoRXZhbikiIDxsaWNAaGlnaGdvLmNvbT4KRGF0 ZTogTW9uLCAxMCBOb3YgMjAyNSAxNToyODowMyArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjFdIEZh bGxiYWNrIGRlZmF1bHQgcmVwbGljYXRpb24gaWRlbnRpdHkgdG8gZnVsbAoKQXV0aG9yOiBDaGFv IExpIDxsaWNAaGlnaGdvLmNvbT4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0u YyAgICAgICAgICAgICAgfCAgNyArKy0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRp b25jbWRzLmMgICAgICAgIHwgIDUgKystLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxp Y2F0aW9uLmMgICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cHJvdG8uYyAgICAgICB8ICA2ICsrKystCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3JlbGF0aW9uLmMgICAgfCAyNiArKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCAgICAgfCAgNyArKysrKwogc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgIDIgKysKIHNyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL2xvZ2ljYWxyZWxhdGlvbi5oICAgICB8ICA0ICsrKwogOCBmaWxlcyBjaGFuZ2VkLCA1 MiBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMK aW5kZXggMzZmZWU5Yzk5NGUuLjZjNDdkMTQwYmQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0u YwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgogI2luY2x1 ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKKyNpbmNsdWRlICJy ZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2Fy cmF5LmgiCkBAIC0zMTE5LDcgKzMxMjAsNyBAQCBsMToKIAogCQlpZiAob2xkX2tleV90dXBsZSAh PSBOVUxMKQogCQl7Ci0JCQlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVscmVwbGlkZW50ID09IFJF UExJQ0FfSURFTlRJVFlfRlVMTCkKKwkJCWlmIChsb2dpY2FscmVwX2lkZW50aXR5X2lzX2Z1bGwo cmVsYXRpb24pKQogCQkJCXhscmVjLmZsYWdzIHw9IFhMSF9ERUxFVEVfQ09OVEFJTlNfT0xEX1RV UExFOwogCQkJZWxzZQogCQkJCXhscmVjLmZsYWdzIHw9IFhMSF9ERUxFVEVfQ09OVEFJTlNfT0xE X0tFWTsKQEAgLTg5NDEsNyArODk0Miw3IEBAIGxvZ19oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxu LCBCdWZmZXIgb2xkYnVmLAogCQl4bHJlYy5mbGFncyB8PSBYTEhfVVBEQVRFX0NPTlRBSU5TX05F V19UVVBMRTsKIAkJaWYgKG9sZF9rZXlfdHVwbGUpCiAJCXsKLQkJCWlmIChyZWxuLT5yZF9yZWwt PnJlbHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0ZVTEwpCisJCQlpZiAobG9naWNhbHJl cF9pZGVudGl0eV9pc19mdWxsKHJlbG4pKQogCQkJCXhscmVjLmZsYWdzIHw9IFhMSF9VUERBVEVf Q09OVEFJTlNfT0xEX1RVUExFOwogCQkJZWxzZQogCQkJCXhscmVjLmZsYWdzIHw9IFhMSF9VUERB VEVfQ09OVEFJTlNfT0xEX0tFWTsKQEAgLTkxNjcsNyArOTE2OCw3IEBAIEV4dHJhY3RSZXBsaWNh SWRlbnRpdHkoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0cCwgYm9vbCBrZXlfcmVxdWly ZWQsCiAJaWYgKHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX05PVEhJTkcpCiAJCXJldHVy biBOVUxMOwogCi0JaWYgKHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0ZVTEwpCisJaWYg KGxvZ2ljYWxyZXBfaWRlbnRpdHlfaXNfZnVsbChyZWxhdGlvbikpCiAJewogCQkvKgogCQkgKiBX aGVuIGxvZ2dpbmcgdGhlIGVudGlyZSBvbGQgdHVwbGUsIGl0IHZlcnkgd2VsbCBjb3VsZCBjb250 YWluCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IDFmYWYzYThjMzcy Li5kM2ZhNDIxMjNlMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRp b25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAg LTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY2xhdXNlLmgiCiAjaW5jbHVk ZSAicGFyc2VyL3BhcnNlX2NvbGxhdGUuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRp b24uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaCIKICNpbmNsdWRl ICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAj aW5jbHVkZSAidXRpbHMvYWNsLmgiCkBAIC0yODEsNyArMjgyLDcgQEAgcHViX3JmX2NvbnRhaW5z X2ludmFsaWRfY29sdW1uKE9pZCBwdWJpZCwgUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmFuY2Vz dG9ycywKIAkgKiBGVUxMIG1lYW5zIGFsbCBjb2x1bW5zIGFyZSBpbiB0aGUgUkVQTElDQSBJREVO VElUWSwgc28gYWxsIGNvbHVtbnMgYXJlCiAJICogYWxsb3dlZCBpbiB0aGUgcm93IGZpbHRlciBh bmQgd2UgY2FuIHNraXAgdGhlIHZhbGlkYXRpb24uCiAJICovCi0JaWYgKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0ZVTEwpCisJaWYgKGxvZ2ljYWxy ZXBfaWRlbnRpdHlfaXNfZnVsbChyZWxhdGlvbikpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qCkBA IC0zODksNyArMzkwLDcgQEAgcHViX2NvbnRhaW5zX2ludmFsaWRfY29sdW1uKE9pZCBwdWJpZCwg UmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmFuY2VzdG9ycywKIAlwdWIgPSBHZXRQdWJsaWNhdGlv bihwdWJpZCk7CiAJY2hlY2tfYW5kX2ZldGNoX2NvbHVtbl9saXN0KHB1YiwgcHVibGlzaF9hc19y ZWxpZCwgTlVMTCwgJmNvbHVtbnMpOwogCi0JaWYgKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHJlcGxp ZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0ZVTEwpCisJaWYgKGxvZ2ljYWxyZXBfaWRlbnRpdHlf aXNfZnVsbChyZWxhdGlvbikpCiAJewogCQkvKiBXaXRoIFJFUExJQ0EgSURFTlRJVFkgRlVMTCwg bm8gY29sdW1uIGxpc3QgaXMgYWxsb3dlZC4gKi8KIAkJKmludmFsaWRfY29sdW1uX2xpc3QgPSAo Y29sdW1ucyAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNS ZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKaW5k ZXggZGVmMzI3NzRjOTAuLjIyODYzYzgwMTU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjUmVwbGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVw bGljYXRpb24uYwpAQCAtMTA4OCw3ICsxMDg4LDcgQEAgQ2hlY2tDbWRSZXBsaWNhSWRlbnRpdHko UmVsYXRpb24gcmVsLCBDbWRUeXBlIGNtZCkKIAkJcmV0dXJuOwogCiAJLyogUkVQTElDQSBJREVO VElUWSBGVUxMIGlzIGFsc28gZ29vZCBmb3IgVVBEQVRFL0RFTEVURS4gKi8KLQlpZiAocmVsLT5y ZF9yZWwtPnJlbHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0ZVTEwpCisJaWYgKGxvZ2lj YWxyZXBfaWRlbnRpdHlfaXNfZnVsbChyZWwpKQogCQlyZXR1cm47CiAKIAkvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IGYwYTkxMzg5MmI5Li5hYTIzZTZlNzVm OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtMTcsNiArMTcs NyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9y bWF0LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgiCisjaW5jbHVkZSAi cmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIApAQCAtNjY5LDYgKzY3MCw3IEBAIGxv Z2ljYWxyZXBfd3JpdGVfcmVsKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgUmVs YXRpb24gcmVsLAogCQkJCQkgUHVibGlzaEdlbmNvbHNUeXBlIGluY2x1ZGVfZ2VuY29sc190eXBl KQogewogCWNoYXIJICAgKnJlbG5hbWU7CisJY2hhcgkJcmVscmVwbGlkZW50ID0gcmVsLT5yZF9y ZWwtPnJlbHJlcGxpZGVudDsKIAogCXBxX3NlbmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX1JF TEFUSU9OKTsKIApAQCAtNjg1LDcgKzY4Nyw5IEBAIGxvZ2ljYWxyZXBfd3JpdGVfcmVsKFN0cmlu Z0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgUmVsYXRpb24gcmVsLAogCXBxX3NlbmRzdHJp bmcob3V0LCByZWxuYW1lKTsKIAogCS8qIHNlbmQgcmVwbGljYSBpZGVudGl0eSAqLwotCXBxX3Nl bmRieXRlKG91dCwgcmVsLT5yZF9yZWwtPnJlbHJlcGxpZGVudCk7CisJaWYgKGxvZ2ljYWxyZXBf aWRlbnRpdHlfaXNfZnVsbChyZWwpKQorCQlyZWxyZXBsaWRlbnQgPSBSRVBMSUNBX0lERU5USVRZ X0ZVTEw7CisJcHFfc2VuZGJ5dGUob3V0LCByZWxyZXBsaWRlbnQpOwogCiAJLyogc2VuZCB0aGUg YXR0cmlidXRlIGluZm8gKi8KIAlsb2dpY2FscmVwX3dyaXRlX2F0dHJzKG91dCwgcmVsLCBjb2x1 bW5zLCBpbmNsdWRlX2dlbmNvbHNfdHlwZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3JlbGF0aW9uLmMKaW5kZXggNzQ1ZmQzYmFiNjQuLjJjNzU2ZmNhNDY5IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCkBAIC0zMCw2ICszMCw3IEBACiAj aW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIK IAorYm9vbAkJbG9naWNhbF9yZXBsaWNhdGlvbl9mYWxsYmFja190b19mdWxsX2lkZW50aXR5ID0g ZmFsc2U7CiAKIHN0YXRpYyBNZW1vcnlDb250ZXh0IExvZ2ljYWxSZXBSZWxNYXBDb250ZXh0ID0g TlVMTDsKIApAQCAtOTU4LDMgKzk1OSwyOCBAQCBGaW5kTG9naWNhbFJlcExvY2FsSW5kZXgoUmVs YXRpb24gbG9jYWxyZWwsIExvZ2ljYWxSZXBSZWxhdGlvbiAqcmVtb3RlcmVsLAogCiAJcmV0dXJu IEludmFsaWRPaWQ7CiB9CisKKy8qCisgKiBsb2dpY2FscmVwX2lkZW50aXR5X2lzX2Z1bGwKKyAq CisgKiBDaGVjayB3aGV0aGVyIHRoZSByZXBsaWNhIGlkZW50aXR5IG9mIHRoZSByZWxhdGlvbiBp cyBmdWxsIG9yIG5vdC4KKyAqIFdoZW4gYSB0YWJsZSdzIHJlcGxpY2EgaWRlbnRpdHkgaXMgZGVm YXVsdCwgYnV0IHRoZXJlIGlzIG5vIHByaW1hcnkga2V5LAorICogaWYgbG9naWNhbF9yZXBsaWNh dGlvbl9mYWxsYmFja190b19mdWxsX2lkZW50aXR5IGlzIHRydWUsIHdlIGNvbnNpZGVyIHRoZQor ICogcmVwbGljYSBpZGVudGl0eSBhcyBmdWxsLiBUaGlzIGZ1bmNpdG9uIHNob3VsZCBvbmx5IGJl IGNhbGxlZCBvbiB0aGUKKyAqIHB1Ymxpc2hlci4KKyAqLworYm9vbAorbG9naWNhbHJlcF9pZGVu dGl0eV9pc19mdWxsKFJlbGF0aW9uIHJlbGF0aW9uKQoreworCUZvcm1fcGdfY2xhc3MgcmVsZm9y bSA9IFJlbGF0aW9uR2V0Rm9ybShyZWxhdGlvbik7CisKKwlpZiAocmVsZm9ybS0+cmVscmVwbGlk ZW50ID09IFJFUExJQ0FfSURFTlRJVFlfRlVMTCkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAocmVs Zm9ybS0+cmVscmVwbGlkZW50ID09IFJFUExJQ0FfSURFTlRJVFlfREVGQVVMVCAmJgorCQlsb2dp Y2FsX3JlcGxpY2F0aW9uX2ZhbGxiYWNrX3RvX2Z1bGxfaWRlbnRpdHkgJiYKKwkJIU9pZElzVmFs aWQoUmVsYXRpb25HZXRSZXBsaWNhSW5kZXgocmVsYXRpb24pKSkKKwkJcmV0dXJuIHRydWU7CisK KwlyZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMu ZGF0CmluZGV4IDExMjgxNjdjMDI1Li5hMDdlZGIwNTI1NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKQEAgLTE4MzMsNiArMTgzMywxMyBAQAogICBtYXggPT4g J01BWF9LSUxPQllURVMnLAogfSwKIAoreyBuYW1lID0+ICdsb2dpY2FsX3JlcGxpY2F0aW9uX2Zh bGxiYWNrX3RvX2Z1bGxfaWRlbnRpdHknLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdD X1NJR0hVUCcsIGdyb3VwID0+ICdSRVBMSUNBVElPTl9TRU5ESU5HJywKKyAgc2hvcnRfZGVzYyA9 PiAnVXNlIFJFUExJQ0EgSURFTlRJVFkgRlVMTCBhdXRvbWF0aWNhbGx5IHdoZW4gYSB0YWJsZSB3 aXRoIERFRkFVTFQgaWRlbnRpdHkgaGFzIG5vIHByaW1hcnkga2V5LicsCisgIGxvbmdfZGVzYyA9 PiAnV2hlbiBlbmFibGVkLCBsb2dpY2FsIHJlcGxpY2F0aW9uIHdpbGwgYXV0b21hdGljYWxseSBz ZW5kIGZ1bGwtcm93IGRhdGEgZm9yIHRhYmxlcyB0aGF0IHNwZWNpZnkgUkVQTElDQSBJREVOVElU WSBERUZBVUxUIGJ1dCBsYWNrIGEgcHJpbWFyeSBrZXksIGluc3RlYWQgb2YgcmFpc2luZyBhbiBl cnJvci4nLAorICB2YXJpYWJsZSA9PiAnbG9naWNhbF9yZXBsaWNhdGlvbl9mYWxsYmFja190b19m dWxsX2lkZW50aXR5JywKKyAgYm9vdF92YWwgPT4gJ2ZhbHNlJywKK30sCisKIHsgbmFtZSA9PiAn bWFpbnRlbmFuY2VfaW9fY29uY3VycmVuY3knLCB0eXBlID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQ R0NfVVNFUlNFVCcsIGdyb3VwID0+ICdSRVNPVVJDRVNfSU8nLAogICBzaG9ydF9kZXNjID0+ICdB IHZhcmlhbnQgb2YgImVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeSIgdGhhdCBpcyB1c2VkIGZvciBt YWludGVuYW5jZSB3b3JrLicsCiAgIGxvbmdfZGVzYyA9PiAnMCBkaXNhYmxlcyBzaW11bHRhbmVv dXMgcmVxdWVzdHMuJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdy ZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25m LnNhbXBsZQppbmRleCBmNjJiNjE5NjdlZi4uZGMxN2NhYTJjMmEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2Vu ZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTM0Niw2ICszNDYsOCBAQAog I3dhbF9zZW5kZXJfdGltZW91dCA9IDYwcwkjIGluIG1pbGxpc2Vjb25kczsgMCBkaXNhYmxlcwog I3RyYWNrX2NvbW1pdF90aW1lc3RhbXAgPSBvZmYJIyBjb2xsZWN0IHRpbWVzdGFtcCBvZiB0cmFu c2FjdGlvbiBjb21taXQKIAkJCQkjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKKyNsb2dpY2Fs X3JlcGxpY2F0aW9uX2ZhbGxiYWNrX3RvX2Z1bGxfaWRlbnRpdHkgPSBvZmYJIyBmYWxsYmFjayBk ZWZhdWx0CisJCQkJIyByZXBsaWNhdGlvbiBpZGVudGl0eSB0byBmdWxsIGlmIG5vIHByaW1hcnkg a2V5CiAKICMgLSBQcmltYXJ5IFNlcnZlciAtCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL2xvZ2ljYWxyZWxhdGlvbi5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9n aWNhbHJlbGF0aW9uLmgKaW5kZXggN2E1NjFhOGU4ZDguLjBjNjI5OWQzYmNhIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaAorKysgYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaApAQCAtMTYsNiArMTYsOSBAQAogI2lu Y2x1ZGUgImNhdGFsb2cvaW5kZXguaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FscHJv dG8uaCIKIAorLyogR1VDIHZhcmlhYmxlcyAqLworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgbG9n aWNhbF9yZXBsaWNhdGlvbl9mYWxsYmFja190b19mdWxsX2lkZW50aXR5OworCiB0eXBlZGVmIHN0 cnVjdCBMb2dpY2FsUmVwUmVsTWFwRW50cnkKIHsKIAlMb2dpY2FsUmVwUmVsYXRpb24gcmVtb3Rl cmVsOwkvKiBrZXkgaXMgcmVtb3RlcmVsLnJlbW90ZWlkICovCkBAIC00OCw2ICs1MSw3IEBAIGV4 dGVybiBMb2dpY2FsUmVwUmVsTWFwRW50cnkgKmxvZ2ljYWxyZXBfcGFydGl0aW9uX29wZW4oTG9n aWNhbFJlcFJlbE1hcEVudHJ5ICpyCiAJCQkJCQkJCQkJCQkJCVJlbGF0aW9uIHBhcnRyZWwsIEF0 dHJNYXAgKm1hcCk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3JlbF9jbG9zZShMb2dpY2FsUmVw UmVsTWFwRW50cnkgKnJlbCwKIAkJCQkJCQkJIExPQ0tNT0RFIGxvY2ttb2RlKTsKK2V4dGVybiBi b29sIGxvZ2ljYWxyZXBfaWRlbnRpdHlfaXNfZnVsbChSZWxhdGlvbiByZWxhdGlvbik7CiBleHRl cm4gYm9vbCBJc0luZGV4VXNhYmxlRm9yUmVwbGljYUlkZW50aXR5RnVsbChSZWxhdGlvbiBpZHhy ZWwsIEF0dHJNYXAgKmF0dHJtYXApOwogZXh0ZXJuIE9pZAlHZXRSZWxhdGlvbklkZW50aXR5T3JQ SyhSZWxhdGlvbiByZWwpOwogCi0tIAoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpCgo= --0000000000005ac3c5064339034c--