diff --git a/csharp/src/Google.Protobuf.Test.TestProtos/TestMessagesEdition2023.pb.cs b/csharp/src/Google.Protobuf.Test.TestProtos/TestMessagesEdition2023.pb.cs
index fa91760cc6..75724b446e 100644
--- a/csharp/src/Google.Protobuf.Test.TestProtos/TestMessagesEdition2023.pb.cs
+++ b/csharp/src/Google.Protobuf.Test.TestProtos/TestMessagesEdition2023.pb.cs
@@ -26,178 +26,180 @@ namespace ProtobufTestMessages.Editions {
           string.Concat(
             "Cjdjb25mb3JtYW5jZS90ZXN0X3Byb3Rvcy90ZXN0X21lc3NhZ2VzX2VkaXRp",
             "b24yMDIzLnByb3RvEh9wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25z",
-            "Itw2ChdUZXN0QWxsVHlwZXNFZGl0aW9uMjAyMxIWCg5vcHRpb25hbF9pbnQz",
-            "MhgBIAEoBRIWCg5vcHRpb25hbF9pbnQ2NBgCIAEoAxIXCg9vcHRpb25hbF91",
-            "aW50MzIYAyABKA0SFwoPb3B0aW9uYWxfdWludDY0GAQgASgEEhcKD29wdGlv",
-            "bmFsX3NpbnQzMhgFIAEoERIXCg9vcHRpb25hbF9zaW50NjQYBiABKBISGAoQ",
-            "b3B0aW9uYWxfZml4ZWQzMhgHIAEoBxIYChBvcHRpb25hbF9maXhlZDY0GAgg",
-            "ASgGEhkKEW9wdGlvbmFsX3NmaXhlZDMyGAkgASgPEhkKEW9wdGlvbmFsX3Nm",
-            "aXhlZDY0GAogASgQEhYKDm9wdGlvbmFsX2Zsb2F0GAsgASgCEhcKD29wdGlv",
-            "bmFsX2RvdWJsZRgMIAEoARIVCg1vcHRpb25hbF9ib29sGA0gASgIEhcKD29w",
-            "dGlvbmFsX3N0cmluZxgOIAEoCRIWCg5vcHRpb25hbF9ieXRlcxgPIAEoDBJn",
-            "ChdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZRgSIAEoCzJGLnByb3RvYnVmX3Rl",
+            "IhsKDkNvbXBsZXhNZXNzYWdlEgkKAWQYASABKAUi3DYKF1Rlc3RBbGxUeXBl",
+            "c0VkaXRpb24yMDIzEhYKDm9wdGlvbmFsX2ludDMyGAEgASgFEhYKDm9wdGlv",
+            "bmFsX2ludDY0GAIgASgDEhcKD29wdGlvbmFsX3VpbnQzMhgDIAEoDRIXCg9v",
+            "cHRpb25hbF91aW50NjQYBCABKAQSFwoPb3B0aW9uYWxfc2ludDMyGAUgASgR",
+            "EhcKD29wdGlvbmFsX3NpbnQ2NBgGIAEoEhIYChBvcHRpb25hbF9maXhlZDMy",
+            "GAcgASgHEhgKEG9wdGlvbmFsX2ZpeGVkNjQYCCABKAYSGQoRb3B0aW9uYWxf",
+            "c2ZpeGVkMzIYCSABKA8SGQoRb3B0aW9uYWxfc2ZpeGVkNjQYCiABKBASFgoO",
+            "b3B0aW9uYWxfZmxvYXQYCyABKAISFwoPb3B0aW9uYWxfZG91YmxlGAwgASgB",
+            "EhUKDW9wdGlvbmFsX2Jvb2wYDSABKAgSFwoPb3B0aW9uYWxfc3RyaW5nGA4g",
+            "ASgJEhYKDm9wdGlvbmFsX2J5dGVzGA8gASgMEmcKF29wdGlvbmFsX25lc3Rl",
+            "ZF9tZXNzYWdlGBIgASgLMkYucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5lZGl0",
+            "aW9ucy5UZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5OZXN0ZWRNZXNzYWdlElwK",
+            "GG9wdGlvbmFsX2ZvcmVpZ25fbWVzc2FnZRgTIAEoCzI6LnByb3RvYnVmX3Rl",
+            "c3RfbWVzc2FnZXMuZWRpdGlvbnMuRm9yZWlnbk1lc3NhZ2VFZGl0aW9uMjAy",
+            "MxJhChRvcHRpb25hbF9uZXN0ZWRfZW51bRgVIAEoDjJDLnByb3RvYnVmX3Rl",
             "c3RfbWVzc2FnZXMuZWRpdGlvbnMuVGVzdEFsbFR5cGVzRWRpdGlvbjIwMjMu",
-            "TmVzdGVkTWVzc2FnZRJcChhvcHRpb25hbF9mb3JlaWduX21lc3NhZ2UYEyAB",
-            "KAsyOi5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLkZvcmVpZ25N",
-            "ZXNzYWdlRWRpdGlvbjIwMjMSYQoUb3B0aW9uYWxfbmVzdGVkX2VudW0YFSAB",
-            "KA4yQy5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRlc3RBbGxU",
-            "eXBlc0VkaXRpb24yMDIzLk5lc3RlZEVudW0SVgoVb3B0aW9uYWxfZm9yZWln",
-            "bl9lbnVtGBYgASgOMjcucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5lZGl0aW9u",
-            "cy5Gb3JlaWduRW51bUVkaXRpb24yMDIzEiEKFW9wdGlvbmFsX3N0cmluZ19w",
-            "aWVjZRgYIAEoCUICCAISGQoNb3B0aW9uYWxfY29yZBgZIAEoCUICCAESUwoR",
-            "cmVjdXJzaXZlX21lc3NhZ2UYGyABKAsyOC5wcm90b2J1Zl90ZXN0X21lc3Nh",
-            "Z2VzLmVkaXRpb25zLlRlc3RBbGxUeXBlc0VkaXRpb24yMDIzEhYKDnJlcGVh",
-            "dGVkX2ludDMyGB8gAygFEhYKDnJlcGVhdGVkX2ludDY0GCAgAygDEhcKD3Jl",
-            "cGVhdGVkX3VpbnQzMhghIAMoDRIXCg9yZXBlYXRlZF91aW50NjQYIiADKAQS",
-            "FwoPcmVwZWF0ZWRfc2ludDMyGCMgAygREhcKD3JlcGVhdGVkX3NpbnQ2NBgk",
-            "IAMoEhIYChByZXBlYXRlZF9maXhlZDMyGCUgAygHEhgKEHJlcGVhdGVkX2Zp",
-            "eGVkNjQYJiADKAYSGQoRcmVwZWF0ZWRfc2ZpeGVkMzIYJyADKA8SGQoRcmVw",
-            "ZWF0ZWRfc2ZpeGVkNjQYKCADKBASFgoOcmVwZWF0ZWRfZmxvYXQYKSADKAIS",
-            "FwoPcmVwZWF0ZWRfZG91YmxlGCogAygBEhUKDXJlcGVhdGVkX2Jvb2wYKyAD",
-            "KAgSFwoPcmVwZWF0ZWRfc3RyaW5nGCwgAygJEhYKDnJlcGVhdGVkX2J5dGVz",
-            "GC0gAygMEmcKF3JlcGVhdGVkX25lc3RlZF9tZXNzYWdlGDAgAygLMkYucHJv",
+            "TmVzdGVkRW51bRJWChVvcHRpb25hbF9mb3JlaWduX2VudW0YFiABKA4yNy5w",
+            "cm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLkZvcmVpZ25FbnVtRWRp",
+            "dGlvbjIwMjMSIQoVb3B0aW9uYWxfc3RyaW5nX3BpZWNlGBggASgJQgIIAhIZ",
+            "Cg1vcHRpb25hbF9jb3JkGBkgASgJQgIIARJTChFyZWN1cnNpdmVfbWVzc2Fn",
+            "ZRgbIAEoCzI4LnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMuVGVz",
+            "dEFsbFR5cGVzRWRpdGlvbjIwMjMSFgoOcmVwZWF0ZWRfaW50MzIYHyADKAUS",
+            "FgoOcmVwZWF0ZWRfaW50NjQYICADKAMSFwoPcmVwZWF0ZWRfdWludDMyGCEg",
+            "AygNEhcKD3JlcGVhdGVkX3VpbnQ2NBgiIAMoBBIXCg9yZXBlYXRlZF9zaW50",
+            "MzIYIyADKBESFwoPcmVwZWF0ZWRfc2ludDY0GCQgAygSEhgKEHJlcGVhdGVk",
+            "X2ZpeGVkMzIYJSADKAcSGAoQcmVwZWF0ZWRfZml4ZWQ2NBgmIAMoBhIZChFy",
+            "ZXBlYXRlZF9zZml4ZWQzMhgnIAMoDxIZChFyZXBlYXRlZF9zZml4ZWQ2NBgo",
+            "IAMoEBIWCg5yZXBlYXRlZF9mbG9hdBgpIAMoAhIXCg9yZXBlYXRlZF9kb3Vi",
+            "bGUYKiADKAESFQoNcmVwZWF0ZWRfYm9vbBgrIAMoCBIXCg9yZXBlYXRlZF9z",
+            "dHJpbmcYLCADKAkSFgoOcmVwZWF0ZWRfYnl0ZXMYLSADKAwSZwoXcmVwZWF0",
+            "ZWRfbmVzdGVkX21lc3NhZ2UYMCADKAsyRi5wcm90b2J1Zl90ZXN0X21lc3Nh",
+            "Z2VzLmVkaXRpb25zLlRlc3RBbGxUeXBlc0VkaXRpb24yMDIzLk5lc3RlZE1l",
+            "c3NhZ2USXAoYcmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlGDEgAygLMjoucHJv",
+            "dG9idWZfdGVzdF9tZXNzYWdlcy5lZGl0aW9ucy5Gb3JlaWduTWVzc2FnZUVk",
+            "aXRpb24yMDIzEmEKFHJlcGVhdGVkX25lc3RlZF9lbnVtGDMgAygOMkMucHJv",
             "dG9idWZfdGVzdF9tZXNzYWdlcy5lZGl0aW9ucy5UZXN0QWxsVHlwZXNFZGl0",
-            "aW9uMjAyMy5OZXN0ZWRNZXNzYWdlElwKGHJlcGVhdGVkX2ZvcmVpZ25fbWVz",
-            "c2FnZRgxIAMoCzI6LnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMu",
-            "Rm9yZWlnbk1lc3NhZ2VFZGl0aW9uMjAyMxJhChRyZXBlYXRlZF9uZXN0ZWRf",
-            "ZW51bRgzIAMoDjJDLnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMu",
-            "VGVzdEFsbFR5cGVzRWRpdGlvbjIwMjMuTmVzdGVkRW51bRJWChVyZXBlYXRl",
-            "ZF9mb3JlaWduX2VudW0YNCADKA4yNy5wcm90b2J1Zl90ZXN0X21lc3NhZ2Vz",
-            "LmVkaXRpb25zLkZvcmVpZ25FbnVtRWRpdGlvbjIwMjMSIQoVcmVwZWF0ZWRf",
-            "c3RyaW5nX3BpZWNlGDYgAygJQgIIAhIZCg1yZXBlYXRlZF9jb3JkGDcgAygJ",
-            "QgIIARIbCgxwYWNrZWRfaW50MzIYSyADKAVCBaoBAhgBEhsKDHBhY2tlZF9p",
-            "bnQ2NBhMIAMoA0IFqgECGAESHAoNcGFja2VkX3VpbnQzMhhNIAMoDUIFqgEC",
-            "GAESHAoNcGFja2VkX3VpbnQ2NBhOIAMoBEIFqgECGAESHAoNcGFja2VkX3Np",
-            "bnQzMhhPIAMoEUIFqgECGAESHAoNcGFja2VkX3NpbnQ2NBhQIAMoEkIFqgEC",
-            "GAESHQoOcGFja2VkX2ZpeGVkMzIYUSADKAdCBaoBAhgBEh0KDnBhY2tlZF9m",
-            "aXhlZDY0GFIgAygGQgWqAQIYARIeCg9wYWNrZWRfc2ZpeGVkMzIYUyADKA9C",
-            "BaoBAhgBEh4KD3BhY2tlZF9zZml4ZWQ2NBhUIAMoEEIFqgECGAESGwoMcGFj",
-            "a2VkX2Zsb2F0GFUgAygCQgWqAQIYARIcCg1wYWNrZWRfZG91YmxlGFYgAygB",
-            "QgWqAQIYARIaCgtwYWNrZWRfYm9vbBhXIAMoCEIFqgECGAESZgoScGFja2Vk",
-            "X25lc3RlZF9lbnVtGFggAygOMkMucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5l",
-            "ZGl0aW9ucy5UZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5OZXN0ZWRFbnVtQgWq",
-            "AQIYARIdCg51bnBhY2tlZF9pbnQzMhhZIAMoBUIFqgECGAISHQoOdW5wYWNr",
-            "ZWRfaW50NjQYWiADKANCBaoBAhgCEh4KD3VucGFja2VkX3VpbnQzMhhbIAMo",
-            "DUIFqgECGAISHgoPdW5wYWNrZWRfdWludDY0GFwgAygEQgWqAQIYAhIeCg91",
-            "bnBhY2tlZF9zaW50MzIYXSADKBFCBaoBAhgCEh4KD3VucGFja2VkX3NpbnQ2",
-            "NBheIAMoEkIFqgECGAISHwoQdW5wYWNrZWRfZml4ZWQzMhhfIAMoB0IFqgEC",
-            "GAISHwoQdW5wYWNrZWRfZml4ZWQ2NBhgIAMoBkIFqgECGAISIAoRdW5wYWNr",
-            "ZWRfc2ZpeGVkMzIYYSADKA9CBaoBAhgCEiAKEXVucGFja2VkX3NmaXhlZDY0",
-            "GGIgAygQQgWqAQIYAhIdCg51bnBhY2tlZF9mbG9hdBhjIAMoAkIFqgECGAIS",
-            "HgoPdW5wYWNrZWRfZG91YmxlGGQgAygBQgWqAQIYAhIcCg11bnBhY2tlZF9i",
-            "b29sGGUgAygIQgWqAQIYAhJoChR1bnBhY2tlZF9uZXN0ZWRfZW51bRhmIAMo",
-            "DjJDLnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMuVGVzdEFsbFR5",
-            "cGVzRWRpdGlvbjIwMjMuTmVzdGVkRW51bUIFqgECGAISZAoPbWFwX2ludDMy",
-            "X2ludDMyGDggAygLMksucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5lZGl0aW9u",
-            "cy5UZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5NYXBJbnQzMkludDMyRW50cnkS",
-            "ZAoPbWFwX2ludDY0X2ludDY0GDkgAygLMksucHJvdG9idWZfdGVzdF9tZXNz",
-            "YWdlcy5lZGl0aW9ucy5UZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5NYXBJbnQ2",
-            "NEludDY0RW50cnkSaAoRbWFwX3VpbnQzMl91aW50MzIYOiADKAsyTS5wcm90",
+            "aW9uMjAyMy5OZXN0ZWRFbnVtElYKFXJlcGVhdGVkX2ZvcmVpZ25fZW51bRg0",
+            "IAMoDjI3LnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMuRm9yZWln",
+            "bkVudW1FZGl0aW9uMjAyMxIhChVyZXBlYXRlZF9zdHJpbmdfcGllY2UYNiAD",
+            "KAlCAggCEhkKDXJlcGVhdGVkX2NvcmQYNyADKAlCAggBEhsKDHBhY2tlZF9p",
+            "bnQzMhhLIAMoBUIFqgECGAESGwoMcGFja2VkX2ludDY0GEwgAygDQgWqAQIY",
+            "ARIcCg1wYWNrZWRfdWludDMyGE0gAygNQgWqAQIYARIcCg1wYWNrZWRfdWlu",
+            "dDY0GE4gAygEQgWqAQIYARIcCg1wYWNrZWRfc2ludDMyGE8gAygRQgWqAQIY",
+            "ARIcCg1wYWNrZWRfc2ludDY0GFAgAygSQgWqAQIYARIdCg5wYWNrZWRfZml4",
+            "ZWQzMhhRIAMoB0IFqgECGAESHQoOcGFja2VkX2ZpeGVkNjQYUiADKAZCBaoB",
+            "AhgBEh4KD3BhY2tlZF9zZml4ZWQzMhhTIAMoD0IFqgECGAESHgoPcGFja2Vk",
+            "X3NmaXhlZDY0GFQgAygQQgWqAQIYARIbCgxwYWNrZWRfZmxvYXQYVSADKAJC",
+            "BaoBAhgBEhwKDXBhY2tlZF9kb3VibGUYViADKAFCBaoBAhgBEhoKC3BhY2tl",
+            "ZF9ib29sGFcgAygIQgWqAQIYARJmChJwYWNrZWRfbmVzdGVkX2VudW0YWCAD",
+            "KA4yQy5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRlc3RBbGxU",
+            "eXBlc0VkaXRpb24yMDIzLk5lc3RlZEVudW1CBaoBAhgBEh0KDnVucGFja2Vk",
+            "X2ludDMyGFkgAygFQgWqAQIYAhIdCg51bnBhY2tlZF9pbnQ2NBhaIAMoA0IF",
+            "qgECGAISHgoPdW5wYWNrZWRfdWludDMyGFsgAygNQgWqAQIYAhIeCg91bnBh",
+            "Y2tlZF91aW50NjQYXCADKARCBaoBAhgCEh4KD3VucGFja2VkX3NpbnQzMhhd",
+            "IAMoEUIFqgECGAISHgoPdW5wYWNrZWRfc2ludDY0GF4gAygSQgWqAQIYAhIf",
+            "ChB1bnBhY2tlZF9maXhlZDMyGF8gAygHQgWqAQIYAhIfChB1bnBhY2tlZF9m",
+            "aXhlZDY0GGAgAygGQgWqAQIYAhIgChF1bnBhY2tlZF9zZml4ZWQzMhhhIAMo",
+            "D0IFqgECGAISIAoRdW5wYWNrZWRfc2ZpeGVkNjQYYiADKBBCBaoBAhgCEh0K",
+            "DnVucGFja2VkX2Zsb2F0GGMgAygCQgWqAQIYAhIeCg91bnBhY2tlZF9kb3Vi",
+            "bGUYZCADKAFCBaoBAhgCEhwKDXVucGFja2VkX2Jvb2wYZSADKAhCBaoBAhgC",
+            "EmgKFHVucGFja2VkX25lc3RlZF9lbnVtGGYgAygOMkMucHJvdG9idWZfdGVz",
+            "dF9tZXNzYWdlcy5lZGl0aW9ucy5UZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5O",
+            "ZXN0ZWRFbnVtQgWqAQIYAhJkCg9tYXBfaW50MzJfaW50MzIYOCADKAsySy5w",
+            "cm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRlc3RBbGxUeXBlc0Vk",
+            "aXRpb24yMDIzLk1hcEludDMySW50MzJFbnRyeRJkCg9tYXBfaW50NjRfaW50",
+            "NjQYOSADKAsySy5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRl",
+            "c3RBbGxUeXBlc0VkaXRpb24yMDIzLk1hcEludDY0SW50NjRFbnRyeRJoChFt",
+            "YXBfdWludDMyX3VpbnQzMhg6IAMoCzJNLnByb3RvYnVmX3Rlc3RfbWVzc2Fn",
+            "ZXMuZWRpdGlvbnMuVGVzdEFsbFR5cGVzRWRpdGlvbjIwMjMuTWFwVWludDMy",
+            "VWludDMyRW50cnkSaAoRbWFwX3VpbnQ2NF91aW50NjQYOyADKAsyTS5wcm90",
             "b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRlc3RBbGxUeXBlc0VkaXRp",
-            "b24yMDIzLk1hcFVpbnQzMlVpbnQzMkVudHJ5EmgKEW1hcF91aW50NjRfdWlu",
-            "dDY0GDsgAygLMk0ucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5lZGl0aW9ucy5U",
-            "ZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5NYXBVaW50NjRVaW50NjRFbnRyeRJo",
-            "ChFtYXBfc2ludDMyX3NpbnQzMhg8IAMoCzJNLnByb3RvYnVmX3Rlc3RfbWVz",
+            "b24yMDIzLk1hcFVpbnQ2NFVpbnQ2NEVudHJ5EmgKEW1hcF9zaW50MzJfc2lu",
+            "dDMyGDwgAygLMk0ucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5lZGl0aW9ucy5U",
+            "ZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5NYXBTaW50MzJTaW50MzJFbnRyeRJo",
+            "ChFtYXBfc2ludDY0X3NpbnQ2NBg9IAMoCzJNLnByb3RvYnVmX3Rlc3RfbWVz",
             "c2FnZXMuZWRpdGlvbnMuVGVzdEFsbFR5cGVzRWRpdGlvbjIwMjMuTWFwU2lu",
-            "dDMyU2ludDMyRW50cnkSaAoRbWFwX3NpbnQ2NF9zaW50NjQYPSADKAsyTS5w",
-            "cm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRlc3RBbGxUeXBlc0Vk",
-            "aXRpb24yMDIzLk1hcFNpbnQ2NFNpbnQ2NEVudHJ5EmwKE21hcF9maXhlZDMy",
-            "X2ZpeGVkMzIYPiADKAsyTy5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRp",
-            "b25zLlRlc3RBbGxUeXBlc0VkaXRpb24yMDIzLk1hcEZpeGVkMzJGaXhlZDMy",
-            "RW50cnkSbAoTbWFwX2ZpeGVkNjRfZml4ZWQ2NBg/IAMoCzJPLnByb3RvYnVm",
-            "X3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMuVGVzdEFsbFR5cGVzRWRpdGlvbjIw",
-            "MjMuTWFwRml4ZWQ2NEZpeGVkNjRFbnRyeRJwChVtYXBfc2ZpeGVkMzJfc2Zp",
-            "eGVkMzIYQCADKAsyUS5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25z",
-            "LlRlc3RBbGxUeXBlc0VkaXRpb24yMDIzLk1hcFNmaXhlZDMyU2ZpeGVkMzJF",
-            "bnRyeRJwChVtYXBfc2ZpeGVkNjRfc2ZpeGVkNjQYQSADKAsyUS5wcm90b2J1",
-            "Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRlc3RBbGxUeXBlc0VkaXRpb24y",
-            "MDIzLk1hcFNmaXhlZDY0U2ZpeGVkNjRFbnRyeRJkCg9tYXBfaW50MzJfZmxv",
-            "YXQYQiADKAsySy5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRl",
-            "c3RBbGxUeXBlc0VkaXRpb24yMDIzLk1hcEludDMyRmxvYXRFbnRyeRJmChBt",
-            "YXBfaW50MzJfZG91YmxlGEMgAygLMkwucHJvdG9idWZfdGVzdF9tZXNzYWdl",
-            "cy5lZGl0aW9ucy5UZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5NYXBJbnQzMkRv",
-            "dWJsZUVudHJ5EmAKDW1hcF9ib29sX2Jvb2wYRCADKAsySS5wcm90b2J1Zl90",
-            "ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRlc3RBbGxUeXBlc0VkaXRpb24yMDIz",
-            "Lk1hcEJvb2xCb29sRW50cnkSaAoRbWFwX3N0cmluZ19zdHJpbmcYRSADKAsy",
-            "TS5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRlc3RBbGxUeXBl",
-            "c0VkaXRpb24yMDIzLk1hcFN0cmluZ1N0cmluZ0VudHJ5EmYKEG1hcF9zdHJp",
-            "bmdfYnl0ZXMYRiADKAsyTC5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRp",
-            "b25zLlRlc3RBbGxUeXBlc0VkaXRpb24yMDIzLk1hcFN0cmluZ0J5dGVzRW50",
-            "cnkSdwoZbWFwX3N0cmluZ19uZXN0ZWRfbWVzc2FnZRhHIAMoCzJULnByb3Rv",
+            "dDY0U2ludDY0RW50cnkSbAoTbWFwX2ZpeGVkMzJfZml4ZWQzMhg+IAMoCzJP",
+            "LnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMuVGVzdEFsbFR5cGVz",
+            "RWRpdGlvbjIwMjMuTWFwRml4ZWQzMkZpeGVkMzJFbnRyeRJsChNtYXBfZml4",
+            "ZWQ2NF9maXhlZDY0GD8gAygLMk8ucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5l",
+            "ZGl0aW9ucy5UZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5NYXBGaXhlZDY0Rml4",
+            "ZWQ2NEVudHJ5EnAKFW1hcF9zZml4ZWQzMl9zZml4ZWQzMhhAIAMoCzJRLnBy",
+            "b3RvYnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMuVGVzdEFsbFR5cGVzRWRp",
+            "dGlvbjIwMjMuTWFwU2ZpeGVkMzJTZml4ZWQzMkVudHJ5EnAKFW1hcF9zZml4",
+            "ZWQ2NF9zZml4ZWQ2NBhBIAMoCzJRLnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMu",
+            "ZWRpdGlvbnMuVGVzdEFsbFR5cGVzRWRpdGlvbjIwMjMuTWFwU2ZpeGVkNjRT",
+            "Zml4ZWQ2NEVudHJ5EmQKD21hcF9pbnQzMl9mbG9hdBhCIAMoCzJLLnByb3Rv",
+            "YnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMuVGVzdEFsbFR5cGVzRWRpdGlv",
+            "bjIwMjMuTWFwSW50MzJGbG9hdEVudHJ5EmYKEG1hcF9pbnQzMl9kb3VibGUY",
+            "QyADKAsyTC5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRlc3RB",
+            "bGxUeXBlc0VkaXRpb24yMDIzLk1hcEludDMyRG91YmxlRW50cnkSYAoNbWFw",
+            "X2Jvb2xfYm9vbBhEIAMoCzJJLnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMuZWRp",
+            "dGlvbnMuVGVzdEFsbFR5cGVzRWRpdGlvbjIwMjMuTWFwQm9vbEJvb2xFbnRy",
+            "eRJoChFtYXBfc3RyaW5nX3N0cmluZxhFIAMoCzJNLnByb3RvYnVmX3Rlc3Rf",
+            "bWVzc2FnZXMuZWRpdGlvbnMuVGVzdEFsbFR5cGVzRWRpdGlvbjIwMjMuTWFw",
+            "U3RyaW5nU3RyaW5nRW50cnkSZgoQbWFwX3N0cmluZ19ieXRlcxhGIAMoCzJM",
+            "LnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMuVGVzdEFsbFR5cGVz",
+            "RWRpdGlvbjIwMjMuTWFwU3RyaW5nQnl0ZXNFbnRyeRJ3ChltYXBfc3RyaW5n",
+            "X25lc3RlZF9tZXNzYWdlGEcgAygLMlQucHJvdG9idWZfdGVzdF9tZXNzYWdl",
+            "cy5lZGl0aW9ucy5UZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5NYXBTdHJpbmdO",
+            "ZXN0ZWRNZXNzYWdlRW50cnkSeQoabWFwX3N0cmluZ19mb3JlaWduX21lc3Nh",
+            "Z2UYSCADKAsyVS5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRl",
+            "c3RBbGxUeXBlc0VkaXRpb24yMDIzLk1hcFN0cmluZ0ZvcmVpZ25NZXNzYWdl",
+            "RW50cnkScQoWbWFwX3N0cmluZ19uZXN0ZWRfZW51bRhJIAMoCzJRLnByb3Rv",
             "YnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMuVGVzdEFsbFR5cGVzRWRpdGlv",
-            "bjIwMjMuTWFwU3RyaW5nTmVzdGVkTWVzc2FnZUVudHJ5EnkKGm1hcF9zdHJp",
-            "bmdfZm9yZWlnbl9tZXNzYWdlGEggAygLMlUucHJvdG9idWZfdGVzdF9tZXNz",
-            "YWdlcy5lZGl0aW9ucy5UZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5NYXBTdHJp",
-            "bmdGb3JlaWduTWVzc2FnZUVudHJ5EnEKFm1hcF9zdHJpbmdfbmVzdGVkX2Vu",
-            "dW0YSSADKAsyUS5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRl",
-            "c3RBbGxUeXBlc0VkaXRpb24yMDIzLk1hcFN0cmluZ05lc3RlZEVudW1FbnRy",
-            "eRJzChdtYXBfc3RyaW5nX2ZvcmVpZ25fZW51bRhKIAMoCzJSLnByb3RvYnVm",
-            "X3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMuVGVzdEFsbFR5cGVzRWRpdGlvbjIw",
-            "MjMuTWFwU3RyaW5nRm9yZWlnbkVudW1FbnRyeRIWCgxvbmVvZl91aW50MzIY",
-            "byABKA1IABJmChRvbmVvZl9uZXN0ZWRfbWVzc2FnZRhwIAEoCzJGLnByb3Rv",
+            "bjIwMjMuTWFwU3RyaW5nTmVzdGVkRW51bUVudHJ5EnMKF21hcF9zdHJpbmdf",
+            "Zm9yZWlnbl9lbnVtGEogAygLMlIucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5l",
+            "ZGl0aW9ucy5UZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5NYXBTdHJpbmdGb3Jl",
+            "aWduRW51bUVudHJ5EhYKDG9uZW9mX3VpbnQzMhhvIAEoDUgAEmYKFG9uZW9m",
+            "X25lc3RlZF9tZXNzYWdlGHAgASgLMkYucHJvdG9idWZfdGVzdF9tZXNzYWdl",
+            "cy5lZGl0aW9ucy5UZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5OZXN0ZWRNZXNz",
+            "YWdlSAASFgoMb25lb2Zfc3RyaW5nGHEgASgJSAASFQoLb25lb2ZfYnl0ZXMY",
+            "ciABKAxIABIUCgpvbmVvZl9ib29sGHMgASgISAASFgoMb25lb2ZfdWludDY0",
+            "GHQgASgESAASFQoLb25lb2ZfZmxvYXQYdSABKAJIABIWCgxvbmVvZl9kb3Vi",
+            "bGUYdiABKAFIABJZCgpvbmVvZl9lbnVtGHcgASgOMkMucHJvdG9idWZfdGVz",
+            "dF9tZXNzYWdlcy5lZGl0aW9ucy5UZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5O",
+            "ZXN0ZWRFbnVtSAASZQoNZ3JvdXBsaWtldHlwZRjJASABKAsyRi5wcm90b2J1",
+            "Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRlc3RBbGxUeXBlc0VkaXRpb24y",
+            "MDIzLkdyb3VwTGlrZVR5cGVCBaoBAigCEmcKD2RlbGltaXRlZF9maWVsZBjK",
+            "ASABKAsyRi5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRlc3RB",
+            "bGxUeXBlc0VkaXRpb24yMDIzLkdyb3VwTGlrZVR5cGVCBaoBAigCGmkKDU5l",
+            "c3RlZE1lc3NhZ2USCQoBYRgBIAEoBRJNCgtjb3JlY3Vyc2l2ZRgCIAEoCzI4",
+            "LnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMuVGVzdEFsbFR5cGVz",
+            "RWRpdGlvbjIwMjMaNAoSTWFwSW50MzJJbnQzMkVudHJ5EgsKA2tleRgBIAEo",
+            "BRINCgV2YWx1ZRgCIAEoBToCOAEaNAoSTWFwSW50NjRJbnQ2NEVudHJ5EgsK",
+            "A2tleRgBIAEoAxINCgV2YWx1ZRgCIAEoAzoCOAEaNgoUTWFwVWludDMyVWlu",
+            "dDMyRW50cnkSCwoDa2V5GAEgASgNEg0KBXZhbHVlGAIgASgNOgI4ARo2ChRN",
+            "YXBVaW50NjRVaW50NjRFbnRyeRILCgNrZXkYASABKAQSDQoFdmFsdWUYAiAB",
+            "KAQ6AjgBGjYKFE1hcFNpbnQzMlNpbnQzMkVudHJ5EgsKA2tleRgBIAEoERIN",
+            "CgV2YWx1ZRgCIAEoEToCOAEaNgoUTWFwU2ludDY0U2ludDY0RW50cnkSCwoD",
+            "a2V5GAEgASgSEg0KBXZhbHVlGAIgASgSOgI4ARo4ChZNYXBGaXhlZDMyRml4",
+            "ZWQzMkVudHJ5EgsKA2tleRgBIAEoBxINCgV2YWx1ZRgCIAEoBzoCOAEaOAoW",
+            "TWFwRml4ZWQ2NEZpeGVkNjRFbnRyeRILCgNrZXkYASABKAYSDQoFdmFsdWUY",
+            "AiABKAY6AjgBGjoKGE1hcFNmaXhlZDMyU2ZpeGVkMzJFbnRyeRILCgNrZXkY",
+            "ASABKA8SDQoFdmFsdWUYAiABKA86AjgBGjoKGE1hcFNmaXhlZDY0U2ZpeGVk",
+            "NjRFbnRyeRILCgNrZXkYASABKBASDQoFdmFsdWUYAiABKBA6AjgBGjQKEk1h",
+            "cEludDMyRmxvYXRFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAI6",
+            "AjgBGjUKE01hcEludDMyRG91YmxlRW50cnkSCwoDa2V5GAEgASgFEg0KBXZh",
+            "bHVlGAIgASgBOgI4ARoyChBNYXBCb29sQm9vbEVudHJ5EgsKA2tleRgBIAEo",
+            "CBINCgV2YWx1ZRgCIAEoCDoCOAEaNgoUTWFwU3RyaW5nU3RyaW5nRW50cnkS",
+            "CwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARo1ChNNYXBTdHJpbmdC",
+            "eXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoDDoCOAEahQEK",
+            "G01hcFN0cmluZ05lc3RlZE1lc3NhZ2VFbnRyeRILCgNrZXkYASABKAkSVQoF",
+            "dmFsdWUYAiABKAsyRi5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25z",
+            "LlRlc3RBbGxUeXBlc0VkaXRpb24yMDIzLk5lc3RlZE1lc3NhZ2U6AjgBGnoK",
+            "HE1hcFN0cmluZ0ZvcmVpZ25NZXNzYWdlRW50cnkSCwoDa2V5GAEgASgJEkkK",
+            "BXZhbHVlGAIgASgLMjoucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5lZGl0aW9u",
+            "cy5Gb3JlaWduTWVzc2FnZUVkaXRpb24yMDIzOgI4ARp/ChhNYXBTdHJpbmdO",
+            "ZXN0ZWRFbnVtRW50cnkSCwoDa2V5GAEgASgJElIKBXZhbHVlGAIgASgOMkMu",
+            "cHJvdG9idWZfdGVzdF9tZXNzYWdlcy5lZGl0aW9ucy5UZXN0QWxsVHlwZXNF",
+            "ZGl0aW9uMjAyMy5OZXN0ZWRFbnVtOgI4ARp0ChlNYXBTdHJpbmdGb3JlaWdu",
+            "RW51bUVudHJ5EgsKA2tleRgBIAEoCRJGCgV2YWx1ZRgCIAEoDjI3LnByb3Rv",
+            "YnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMuRm9yZWlnbkVudW1FZGl0aW9u",
+            "MjAyMzoCOAEaPAoNR3JvdXBMaWtlVHlwZRIUCgtncm91cF9pbnQzMhjKASAB",
+            "KAUSFQoMZ3JvdXBfdWludDMyGMsBIAEoDSI5CgpOZXN0ZWRFbnVtEgcKA0ZP",
+            "TxAAEgcKA0JBUhABEgcKA0JBWhACEhAKA05FRxD///////////8BKgUIeBDJ",
+            "AUINCgtvbmVvZl9maWVsZCImChlGb3JlaWduTWVzc2FnZUVkaXRpb24yMDIz",
+            "EgkKAWMYASABKAUiGgoNR3JvdXBMaWtlVHlwZRIJCgFjGAEgASgFKksKFkZv",
+            "cmVpZ25FbnVtRWRpdGlvbjIwMjMSDwoLRk9SRUlHTl9GT08QABIPCgtGT1JF",
+            "SUdOX0JBUhABEg8KC0ZPUkVJR05fQkFaEAI6UQoPZXh0ZW5zaW9uX2ludDMy",
+            "EjgucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5lZGl0aW9ucy5UZXN0QWxsVHlw",
+            "ZXNFZGl0aW9uMjAyMxh4IAEoBTqGAQoNZ3JvdXBsaWtldHlwZRI4LnByb3Rv",
             "YnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMuVGVzdEFsbFR5cGVzRWRpdGlv",
-            "bjIwMjMuTmVzdGVkTWVzc2FnZUgAEhYKDG9uZW9mX3N0cmluZxhxIAEoCUgA",
-            "EhUKC29uZW9mX2J5dGVzGHIgASgMSAASFAoKb25lb2ZfYm9vbBhzIAEoCEgA",
-            "EhYKDG9uZW9mX3VpbnQ2NBh0IAEoBEgAEhUKC29uZW9mX2Zsb2F0GHUgASgC",
-            "SAASFgoMb25lb2ZfZG91YmxlGHYgASgBSAASWQoKb25lb2ZfZW51bRh3IAEo",
-            "DjJDLnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMuVGVzdEFsbFR5",
-            "cGVzRWRpdGlvbjIwMjMuTmVzdGVkRW51bUgAEmUKDWdyb3VwbGlrZXR5cGUY",
-            "yQEgASgLMkYucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5lZGl0aW9ucy5UZXN0",
-            "QWxsVHlwZXNFZGl0aW9uMjAyMy5Hcm91cExpa2VUeXBlQgWqAQIoAhJnCg9k",
-            "ZWxpbWl0ZWRfZmllbGQYygEgASgLMkYucHJvdG9idWZfdGVzdF9tZXNzYWdl",
-            "cy5lZGl0aW9ucy5UZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5Hcm91cExpa2VU",
-            "eXBlQgWqAQIoAhppCg1OZXN0ZWRNZXNzYWdlEgkKAWEYASABKAUSTQoLY29y",
-            "ZWN1cnNpdmUYAiABKAsyOC5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRp",
-            "b25zLlRlc3RBbGxUeXBlc0VkaXRpb24yMDIzGjQKEk1hcEludDMySW50MzJF",
-            "bnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBGjQKEk1hcElu",
-            "dDY0SW50NjRFbnRyeRILCgNrZXkYASABKAMSDQoFdmFsdWUYAiABKAM6AjgB",
-            "GjYKFE1hcFVpbnQzMlVpbnQzMkVudHJ5EgsKA2tleRgBIAEoDRINCgV2YWx1",
-            "ZRgCIAEoDToCOAEaNgoUTWFwVWludDY0VWludDY0RW50cnkSCwoDa2V5GAEg",
-            "ASgEEg0KBXZhbHVlGAIgASgEOgI4ARo2ChRNYXBTaW50MzJTaW50MzJFbnRy",
-            "eRILCgNrZXkYASABKBESDQoFdmFsdWUYAiABKBE6AjgBGjYKFE1hcFNpbnQ2",
-            "NFNpbnQ2NEVudHJ5EgsKA2tleRgBIAEoEhINCgV2YWx1ZRgCIAEoEjoCOAEa",
-            "OAoWTWFwRml4ZWQzMkZpeGVkMzJFbnRyeRILCgNrZXkYASABKAcSDQoFdmFs",
-            "dWUYAiABKAc6AjgBGjgKFk1hcEZpeGVkNjRGaXhlZDY0RW50cnkSCwoDa2V5",
-            "GAEgASgGEg0KBXZhbHVlGAIgASgGOgI4ARo6ChhNYXBTZml4ZWQzMlNmaXhl",
-            "ZDMyRW50cnkSCwoDa2V5GAEgASgPEg0KBXZhbHVlGAIgASgPOgI4ARo6ChhN",
-            "YXBTZml4ZWQ2NFNmaXhlZDY0RW50cnkSCwoDa2V5GAEgASgQEg0KBXZhbHVl",
-            "GAIgASgQOgI4ARo0ChJNYXBJbnQzMkZsb2F0RW50cnkSCwoDa2V5GAEgASgF",
-            "Eg0KBXZhbHVlGAIgASgCOgI4ARo1ChNNYXBJbnQzMkRvdWJsZUVudHJ5EgsK",
-            "A2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoAToCOAEaMgoQTWFwQm9vbEJvb2xF",
-            "bnRyeRILCgNrZXkYASABKAgSDQoFdmFsdWUYAiABKAg6AjgBGjYKFE1hcFN0",
-            "cmluZ1N0cmluZ0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToC",
-            "OAEaNQoTTWFwU3RyaW5nQnl0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFs",
-            "dWUYAiABKAw6AjgBGoUBChtNYXBTdHJpbmdOZXN0ZWRNZXNzYWdlRW50cnkS",
-            "CwoDa2V5GAEgASgJElUKBXZhbHVlGAIgASgLMkYucHJvdG9idWZfdGVzdF9t",
-            "ZXNzYWdlcy5lZGl0aW9ucy5UZXN0QWxsVHlwZXNFZGl0aW9uMjAyMy5OZXN0",
-            "ZWRNZXNzYWdlOgI4ARp6ChxNYXBTdHJpbmdGb3JlaWduTWVzc2FnZUVudHJ5",
-            "EgsKA2tleRgBIAEoCRJJCgV2YWx1ZRgCIAEoCzI6LnByb3RvYnVmX3Rlc3Rf",
-            "bWVzc2FnZXMuZWRpdGlvbnMuRm9yZWlnbk1lc3NhZ2VFZGl0aW9uMjAyMzoC",
-            "OAEafwoYTWFwU3RyaW5nTmVzdGVkRW51bUVudHJ5EgsKA2tleRgBIAEoCRJS",
-            "CgV2YWx1ZRgCIAEoDjJDLnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlv",
-            "bnMuVGVzdEFsbFR5cGVzRWRpdGlvbjIwMjMuTmVzdGVkRW51bToCOAEadAoZ",
-            "TWFwU3RyaW5nRm9yZWlnbkVudW1FbnRyeRILCgNrZXkYASABKAkSRgoFdmFs",
-            "dWUYAiABKA4yNy5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLkZv",
-            "cmVpZ25FbnVtRWRpdGlvbjIwMjM6AjgBGjwKDUdyb3VwTGlrZVR5cGUSFAoL",
-            "Z3JvdXBfaW50MzIYygEgASgFEhUKDGdyb3VwX3VpbnQzMhjLASABKA0iOQoK",
-            "TmVzdGVkRW51bRIHCgNGT08QABIHCgNCQVIQARIHCgNCQVoQAhIQCgNORUcQ",
-            "////////////ASoFCHgQyQFCDQoLb25lb2ZfZmllbGQiJgoZRm9yZWlnbk1l",
-            "c3NhZ2VFZGl0aW9uMjAyMxIJCgFjGAEgASgFIhoKDUdyb3VwTGlrZVR5cGUS",
-            "CQoBYxgBIAEoBSpLChZGb3JlaWduRW51bUVkaXRpb24yMDIzEg8KC0ZPUkVJ",
-            "R05fRk9PEAASDwoLRk9SRUlHTl9CQVIQARIPCgtGT1JFSUdOX0JBWhACOlEK",
-            "D2V4dGVuc2lvbl9pbnQzMhI4LnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMuZWRp",
-            "dGlvbnMuVGVzdEFsbFR5cGVzRWRpdGlvbjIwMjMYeCABKAU6hgEKDWdyb3Vw",
-            "bGlrZXR5cGUSOC5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25zLlRl",
-            "c3RBbGxUeXBlc0VkaXRpb24yMDIzGHkgASgLMi4ucHJvdG9idWZfdGVzdF9t",
-            "ZXNzYWdlcy5lZGl0aW9ucy5Hcm91cExpa2VUeXBlQgWqAQIoAjqGAQoNZGVs",
-            "aW1pdGVkX2V4dBI4LnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlvbnMu",
-            "VGVzdEFsbFR5cGVzRWRpdGlvbjIwMjMYeiABKAsyLi5wcm90b2J1Zl90ZXN0",
-            "X21lc3NhZ2VzLmVkaXRpb25zLkdyb3VwTGlrZVR5cGVCBaoBAigCQjwKLWNv",
-            "bS5nb29nbGUucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5lZGl0aW9uMjAyM1AB",
-            "ogIIRWRpdGlvbnNiCGVkaXRpb25zcOgH"));
+            "bjIwMjMYeSABKAsyLi5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb25z",
+            "Lkdyb3VwTGlrZVR5cGVCBaoBAigCOoYBCg1kZWxpbWl0ZWRfZXh0EjgucHJv",
+            "dG9idWZfdGVzdF9tZXNzYWdlcy5lZGl0aW9ucy5UZXN0QWxsVHlwZXNFZGl0",
+            "aW9uMjAyMxh6IAEoCzIuLnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMuZWRpdGlv",
+            "bnMuR3JvdXBMaWtlVHlwZUIFqgECKAJCPAotY29tLmdvb2dsZS5wcm90b2J1",
+            "Zl90ZXN0X21lc3NhZ2VzLmVkaXRpb24yMDIzUAGiAghFZGl0aW9uc2IIZWRp",
+            "dGlvbnNw6Ac="));
       descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
           new pbr::FileDescriptor[] { },
           new pbr::GeneratedClrTypeInfo(new[] {typeof(global::ProtobufTestMessages.Editions.ForeignEnumEdition2023), }, new pb::Extension[] { TestMessagesEdition2023Extensions.ExtensionInt32, TestMessagesEdition2023Extensions.GroupLikeType, TestMessagesEdition2023Extensions.DelimitedExt }, new pbr::GeneratedClrTypeInfo[] {
+            new pbr::GeneratedClrTypeInfo(typeof(global::ProtobufTestMessages.Editions.ComplexMessage), global::ProtobufTestMessages.Editions.ComplexMessage.Parser, new[]{ "D" }, null, null, null, null),
             new pbr::GeneratedClrTypeInfo(typeof(global::ProtobufTestMessages.Editions.TestAllTypesEdition2023), global::ProtobufTestMessages.Editions.TestAllTypesEdition2023.Parser, new[]{ "OptionalInt32", "OptionalInt64", "OptionalUint32", "OptionalUint64", "OptionalSint32", "OptionalSint64", "OptionalFixed32", "OptionalFixed64", "OptionalSfixed32", "OptionalSfixed64", "OptionalFloat", "OptionalDouble", "OptionalBool", "OptionalString", "OptionalBytes", "OptionalNestedMessage", "OptionalForeignMessage", "OptionalNestedEnum", "OptionalForeignEnum", "OptionalStringPiece", "OptionalCord", "RecursiveMessage", "RepeatedInt32", "RepeatedInt64", "RepeatedUint32", "RepeatedUint64", "RepeatedSint32", "RepeatedSint64", "RepeatedFixed32", "RepeatedFixed64", "RepeatedSfixed32", "RepeatedSfixed64", "RepeatedFloat", "RepeatedDouble", "RepeatedBool", "RepeatedString", "RepeatedBytes", "RepeatedNestedMessage", "RepeatedForeignMessage", "RepeatedNestedEnum", "RepeatedForeignEnum", "RepeatedStringPiece", "RepeatedCord", "PackedInt32", "PackedInt64", "PackedUint32", "PackedUint64", "PackedSint32", "PackedSint64", "PackedFixed32", "PackedFixed64", "PackedSfixed32", "PackedSfixed64", "PackedFloat", "PackedDouble", "PackedBool", "PackedNestedEnum", "UnpackedInt32", "UnpackedInt64", "UnpackedUint32", "UnpackedUint64", "UnpackedSint32", "UnpackedSint64", "UnpackedFixed32", "UnpackedFixed64", "UnpackedSfixed32", "UnpackedSfixed64", "UnpackedFloat", "UnpackedDouble", "UnpackedBool", "UnpackedNestedEnum", "MapInt32Int32", "MapInt64Int64", "MapUint32Uint32", "MapUint64Uint64", "MapSint32Sint32", "MapSint64Sint64", "MapFixed32Fixed32", "MapFixed64Fixed64", "MapSfixed32Sfixed32", "MapSfixed64Sfixed64", "MapInt32Float", "MapInt32Double", "MapBoolBool", "MapStringString", "MapStringBytes", "MapStringNestedMessage", "MapStringForeignMessage", "MapStringNestedEnum", "MapStringForeignEnum", "OneofUint32", "OneofNestedMessage", "OneofString", "OneofBytes", "OneofBool", "OneofUint64", "OneofFloat", "OneofDouble", "OneofEnum", "GroupLikeType", "DelimitedField" }, new[]{ "OneofField" }, new[]{ typeof(global::ProtobufTestMessages.Editions.TestAllTypesEdition2023.Types.NestedEnum) }, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::ProtobufTestMessages.Editions.TestAllTypesEdition2023.Types.NestedMessage), global::ProtobufTestMessages.Editions.TestAllTypesEdition2023.Types.NestedMessage.Parser, new[]{ "A", "Corecursive" }, null, null, null, null),
             null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new pbr::GeneratedClrTypeInfo(typeof(global::ProtobufTestMessages.Editions.TestAllTypesEdition2023.Types.GroupLikeType), global::ProtobufTestMessages.Editions.TestAllTypesEdition2023.Types.GroupLikeType.Parser, new[]{ "GroupInt32", "GroupUint32" }, null, null, null, null)}),
             new pbr::GeneratedClrTypeInfo(typeof(global::ProtobufTestMessages.Editions.ForeignMessageEdition2023), global::ProtobufTestMessages.Editions.ForeignMessageEdition2023.Parser, new[]{ "C" }, null, null, null, null),
@@ -227,6 +229,221 @@ namespace ProtobufTestMessages.Editions {
   #endregion
 
   #region Messages
+  [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
+  public sealed partial class ComplexMessage : pb::IMessage<ComplexMessage>
+  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+      , pb::IBufferMessage
+  #endif
+  {
+    private static readonly pb::MessageParser<ComplexMessage> _parser = new pb::MessageParser<ComplexMessage>(() => new ComplexMessage());
+    private pb::UnknownFieldSet _unknownFields;
+    private int _hasBits0;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public static pb::MessageParser<ComplexMessage> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::ProtobufTestMessages.Editions.TestMessagesEdition2023Reflection.Descriptor.MessageTypes[0]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public ComplexMessage() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public ComplexMessage(ComplexMessage other) : this() {
+      _hasBits0 = other._hasBits0;
+      d_ = other.d_;
+      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public ComplexMessage Clone() {
+      return new ComplexMessage(this);
+    }
+
+    /// <summary>Field number for the "d" field.</summary>
+    public const int DFieldNumber = 1;
+    private readonly static int DDefaultValue = 0;
+
+    private int d_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public int D {
+      get { if ((_hasBits0 & 1) != 0) { return d_; } else { return DDefaultValue; } }
+      set {
+        _hasBits0 |= 1;
+        d_ = value;
+      }
+    }
+    /// <summary>Gets whether the "d" field is set</summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public bool HasD {
+      get { return (_hasBits0 & 1) != 0; }
+    }
+    /// <summary>Clears the value of the "d" field</summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public void ClearD() {
+      _hasBits0 &= ~1;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public override bool Equals(object other) {
+      return Equals(other as ComplexMessage);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public bool Equals(ComplexMessage other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (D != other.D) return false;
+      return Equals(_unknownFields, other._unknownFields);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (HasD) hash ^= D.GetHashCode();
+      if (_unknownFields != null) {
+        hash ^= _unknownFields.GetHashCode();
+      }
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public void WriteTo(pb::CodedOutputStream output) {
+    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+      output.WriteRawMessage(this);
+    #else
+      if (HasD) {
+        output.WriteRawTag(8);
+        output.WriteInt32(D);
+      }
+      if (_unknownFields != null) {
+        _unknownFields.WriteTo(output);
+      }
+    #endif
+    }
+
+    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+      if (HasD) {
+        output.WriteRawTag(8);
+        output.WriteInt32(D);
+      }
+      if (_unknownFields != null) {
+        _unknownFields.WriteTo(ref output);
+      }
+    }
+    #endif
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public int CalculateSize() {
+      int size = 0;
+      if (HasD) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(D);
+      }
+      if (_unknownFields != null) {
+        size += _unknownFields.CalculateSize();
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public void MergeFrom(ComplexMessage other) {
+      if (other == null) {
+        return;
+      }
+      if (other.HasD) {
+        D = other.D;
+      }
+      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    public void MergeFrom(pb::CodedInputStream input) {
+    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+      input.ReadRawMessage(this);
+    #else
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+      if ((tag & 7) == 4) {
+        // Abort on any end group tag.
+        return;
+      }
+      switch(tag) {
+          default:
+            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+            break;
+          case 8: {
+            D = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    #endif
+    }
+
+    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+      if ((tag & 7) == 4) {
+        // Abort on any end group tag.
+        return;
+      }
+      switch(tag) {
+          default:
+            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
+            break;
+          case 8: {
+            D = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+    #endif
+
+  }
+
   [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
   public sealed partial class TestAllTypesEdition2023 : pb::IExtendableMessage<TestAllTypesEdition2023>
   #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
@@ -245,7 +462,7 @@ namespace ProtobufTestMessages.Editions {
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
     public static pbr::MessageDescriptor Descriptor {
-      get { return global::ProtobufTestMessages.Editions.TestMessagesEdition2023Reflection.Descriptor.MessageTypes[0]; }
+      get { return global::ProtobufTestMessages.Editions.TestMessagesEdition2023Reflection.Descriptor.MessageTypes[1]; }
     }
 
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -4625,7 +4842,7 @@ namespace ProtobufTestMessages.Editions {
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
     public static pbr::MessageDescriptor Descriptor {
-      get { return global::ProtobufTestMessages.Editions.TestMessagesEdition2023Reflection.Descriptor.MessageTypes[1]; }
+      get { return global::ProtobufTestMessages.Editions.TestMessagesEdition2023Reflection.Descriptor.MessageTypes[2]; }
     }
 
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -4840,7 +5057,7 @@ namespace ProtobufTestMessages.Editions {
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
     public static pbr::MessageDescriptor Descriptor {
-      get { return global::ProtobufTestMessages.Editions.TestMessagesEdition2023Reflection.Descriptor.MessageTypes[2]; }
+      get { return global::ProtobufTestMessages.Editions.TestMessagesEdition2023Reflection.Descriptor.MessageTypes[3]; }
     }
 
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
diff --git a/csharp/src/Google.Protobuf.Test/testprotos.pb b/csharp/src/Google.Protobuf.Test/testprotos.pb
index c8495d4f4a..59d8e44d8f 100644
Binary files a/csharp/src/Google.Protobuf.Test/testprotos.pb and b/csharp/src/Google.Protobuf.Test/testprotos.pb differ