@thru/thru-sdk 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +7 -0
  2. package/buf.gen.yaml +12 -0
  3. package/buf.lock +9 -0
  4. package/buf.yaml +15 -0
  5. package/dist/sdk.d.ts +1354 -0
  6. package/dist/sdk.js +1130 -0
  7. package/dist/sdk.js.map +1 -0
  8. package/package.json +39 -0
  9. package/proto/thru/common/v1/consensus.proto +75 -0
  10. package/proto/thru/common/v1/errors.proto +67 -0
  11. package/proto/thru/common/v1/filters.proto +50 -0
  12. package/proto/thru/common/v1/pagination.proto +47 -0
  13. package/proto/thru/core/v1/account.proto +138 -0
  14. package/proto/thru/core/v1/block.proto +82 -0
  15. package/proto/thru/core/v1/state.proto +37 -0
  16. package/proto/thru/core/v1/transaction.proto +95 -0
  17. package/proto/thru/core/v1/types.proto +52 -0
  18. package/proto/thru/services/v1/command_service.proto +45 -0
  19. package/proto/thru/services/v1/query_service.proto +344 -0
  20. package/proto/thru/services/v1/streaming_service.proto +128 -0
  21. package/thru-ts-client-sdk/core/bound-client.ts +129 -0
  22. package/thru-ts-client-sdk/core/client.ts +38 -0
  23. package/thru-ts-client-sdk/counter.ts +216 -0
  24. package/thru-ts-client-sdk/create-account.ts +78 -0
  25. package/thru-ts-client-sdk/defaults.ts +17 -0
  26. package/thru-ts-client-sdk/get-height.ts +52 -0
  27. package/thru-ts-client-sdk/modules/accounts.ts +137 -0
  28. package/thru-ts-client-sdk/modules/blocks.ts +75 -0
  29. package/thru-ts-client-sdk/modules/events.ts +20 -0
  30. package/thru-ts-client-sdk/modules/height.ts +9 -0
  31. package/thru-ts-client-sdk/modules/helpers.ts +340 -0
  32. package/thru-ts-client-sdk/modules/proofs.ts +20 -0
  33. package/thru-ts-client-sdk/modules/streaming.ts +34 -0
  34. package/thru-ts-client-sdk/modules/transactions.ts +274 -0
  35. package/thru-ts-client-sdk/proto/buf/validate/validate_pb.ts +4761 -0
  36. package/thru-ts-client-sdk/proto/google/api/annotations_pb.ts +39 -0
  37. package/thru-ts-client-sdk/proto/google/api/client_pb.ts +953 -0
  38. package/thru-ts-client-sdk/proto/google/api/field_behavior_pb.ts +157 -0
  39. package/thru-ts-client-sdk/proto/google/api/http_pb.ts +474 -0
  40. package/thru-ts-client-sdk/proto/google/api/launch_stage_pb.ts +118 -0
  41. package/thru-ts-client-sdk/proto/thru/common/v1/consensus_pb.ts +163 -0
  42. package/thru-ts-client-sdk/proto/thru/common/v1/errors_pb.ts +130 -0
  43. package/thru-ts-client-sdk/proto/thru/common/v1/filters_pb.ts +81 -0
  44. package/thru-ts-client-sdk/proto/thru/common/v1/pagination_pb.ts +80 -0
  45. package/thru-ts-client-sdk/proto/thru/core/v1/account_pb.ts +358 -0
  46. package/thru-ts-client-sdk/proto/thru/core/v1/block_pb.ts +260 -0
  47. package/thru-ts-client-sdk/proto/thru/core/v1/state_pb.ts +104 -0
  48. package/thru-ts-client-sdk/proto/thru/core/v1/transaction_pb.ts +327 -0
  49. package/thru-ts-client-sdk/proto/thru/core/v1/types_pb.ts +101 -0
  50. package/thru-ts-client-sdk/proto/thru/services/v1/command_service_pb.ts +81 -0
  51. package/thru-ts-client-sdk/proto/thru/services/v1/query_service_pb.ts +813 -0
  52. package/thru-ts-client-sdk/proto/thru/services/v1/streaming_service_pb.ts +391 -0
  53. package/thru-ts-client-sdk/sdk.ts +58 -0
  54. package/thru-ts-client-sdk/transactions/Transaction.ts +240 -0
  55. package/thru-ts-client-sdk/transactions/TransactionBuilder.ts +48 -0
  56. package/thru-ts-client-sdk/transactions/__tests__/transaction.test.ts +95 -0
  57. package/thru-ts-client-sdk/transactions/index.ts +3 -0
  58. package/thru-ts-client-sdk/transactions/types.ts +64 -0
  59. package/thru-ts-client-sdk/transactions/utils.ts +134 -0
  60. package/thru-ts-client-sdk/types/types.ts +8 -0
  61. package/thru-ts-client-sdk/utils/utils.ts +70 -0
  62. package/tsconfig.json +9 -0
  63. package/tsup.config.ts +10 -0
@@ -0,0 +1,4761 @@
1
+ // Copyright 2023-2025 Buf Technologies, Inc.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ // @generated by protoc-gen-es v2.9.0 with parameter "target=ts"
16
+ // @generated from file buf/validate/validate.proto (package buf.validate, syntax proto2)
17
+ /* eslint-disable */
18
+
19
+ import type { GenEnum, GenExtension, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
20
+ import { enumDesc, extDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
21
+ import type { Duration, FieldDescriptorProto_Type, FieldOptions, MessageOptions, OneofOptions, Timestamp } from "@bufbuild/protobuf/wkt";
22
+ import { file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
23
+ import type { Message } from "@bufbuild/protobuf";
24
+
25
+ /**
26
+ * Describes the file buf/validate/validate.proto.
27
+ */
28
+ export const file_buf_validate_validate: GenFile = /*@__PURE__*/
29
+ fileDesc("ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI3CgRSdWxlEgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSJuCgxNZXNzYWdlUnVsZXMSHwoDY2VsGAMgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGUSLQoFb25lb2YYBCADKAsyHi5idWYudmFsaWRhdGUuTWVzc2FnZU9uZW9mUnVsZUoECAEQAlIIZGlzYWJsZWQiNAoQTWVzc2FnZU9uZW9mUnVsZRIOCgZmaWVsZHMYASADKAkSEAoIcmVxdWlyZWQYAiABKAgiHgoKT25lb2ZSdWxlcxIQCghyZXF1aXJlZBgBIAEoCCK/CAoKRmllbGRSdWxlcxIfCgNjZWwYFyADKAsyEi5idWYudmFsaWRhdGUuUnVsZRIQCghyZXF1aXJlZBgZIAEoCBIkCgZpZ25vcmUYGyABKA4yFC5idWYudmFsaWRhdGUuSWdub3JlEikKBWZsb2F0GAEgASgLMhguYnVmLnZhbGlkYXRlLkZsb2F0UnVsZXNIABIrCgZkb3VibGUYAiABKAsyGS5idWYudmFsaWRhdGUuRG91YmxlUnVsZXNIABIpCgVpbnQzMhgDIAEoCzIYLmJ1Zi52YWxpZGF0ZS5JbnQzMlJ1bGVzSAASKQoFaW50NjQYBCABKAsyGC5idWYudmFsaWRhdGUuSW50NjRSdWxlc0gAEisKBnVpbnQzMhgFIAEoCzIZLmJ1Zi52YWxpZGF0ZS5VSW50MzJSdWxlc0gAEisKBnVpbnQ2NBgGIAEoCzIZLmJ1Zi52YWxpZGF0ZS5VSW50NjRSdWxlc0gAEisKBnNpbnQzMhgHIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TSW50MzJSdWxlc0gAEisKBnNpbnQ2NBgIIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TSW50NjRSdWxlc0gAEi0KB2ZpeGVkMzIYCSABKAsyGi5idWYudmFsaWRhdGUuRml4ZWQzMlJ1bGVzSAASLQoHZml4ZWQ2NBgKIAEoCzIaLmJ1Zi52YWxpZGF0ZS5GaXhlZDY0UnVsZXNIABIvCghzZml4ZWQzMhgLIAEoCzIbLmJ1Zi52YWxpZGF0ZS5TRml4ZWQzMlJ1bGVzSAASLwoIc2ZpeGVkNjQYDCABKAsyGy5idWYudmFsaWRhdGUuU0ZpeGVkNjRSdWxlc0gAEicKBGJvb2wYDSABKAsyFy5idWYudmFsaWRhdGUuQm9vbFJ1bGVzSAASKwoGc3RyaW5nGA4gASgLMhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzSAASKQoFYnl0ZXMYDyABKAsyGC5idWYudmFsaWRhdGUuQnl0ZXNSdWxlc0gAEicKBGVudW0YECABKAsyFy5idWYudmFsaWRhdGUuRW51bVJ1bGVzSAASLwoIcmVwZWF0ZWQYEiABKAsyGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlc0gAEiUKA21hcBgTIAEoCzIWLmJ1Zi52YWxpZGF0ZS5NYXBSdWxlc0gAEiUKA2FueRgUIAEoCzIWLmJ1Zi52YWxpZGF0ZS5BbnlSdWxlc0gAEi8KCGR1cmF0aW9uGBUgASgLMhsuYnVmLnZhbGlkYXRlLkR1cmF0aW9uUnVsZXNIABIxCgl0aW1lc3RhbXAYFiABKAsyHC5idWYudmFsaWRhdGUuVGltZXN0YW1wUnVsZXNIAEIGCgR0eXBlSgQIGBAZSgQIGhAbUgdza2lwcGVkUgxpZ25vcmVfZW1wdHkiVQoPUHJlZGVmaW5lZFJ1bGVzEh8KA2NlbBgBIAMoCzISLmJ1Zi52YWxpZGF0ZS5SdWxlSgQIGBAZSgQIGhAbUgdza2lwcGVkUgxpZ25vcmVfZW1wdHki2hcKCkZsb2F0UnVsZXMSgwEKBWNvbnN0GAEgASgCQnTCSHEKbwoLZmxvYXQuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKfAQoCbHQYAiABKAJCkAHCSIwBCokBCghmbG9hdC5sdBp9IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKvAQoDbHRlGAMgASgCQp8BwkibAQqYAQoJZmxvYXQubHRlGooBIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAAS7wcKAmd0GAQgASgCQuAHwkjcBwqNAQoIZmxvYXQuZ3QagAEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwrDAQoLZmxvYXQuZ3RfbHQaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrNAQoVZmxvYXQuZ3RfbHRfZXhjbHVzaXZlGrMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycK0wEKDGZsb2F0Lmd0X2x0ZRrCAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCt0BChZmbG9hdC5ndF9sdGVfZXhjbHVzaXZlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARK6CAoDZ3RlGAUgASgCQqoIwkimCAqbAQoJZmxvYXQuZ3RlGo0BIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCtIBCgxmbG9hdC5ndGVfbHQawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtwBChZmbG9hdC5ndGVfbHRfZXhjbHVzaXZlGsEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwriAQoNZmxvYXQuZ3RlX2x0ZRrQAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK7AEKF2Zsb2F0Lmd0ZV9sdGVfZXhjbHVzaXZlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygCQnPCSHAKbgoIZmxvYXQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoAkJmwkhjCmEKDGZsb2F0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEnUKBmZpbml0ZRgIIAEoCEJlwkhiCmAKDGZsb2F0LmZpbml0ZRpQcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAndmFsdWUgbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSKwoHZXhhbXBsZRgJIAMoAkIawkgXChUKDWZsb2F0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIu0XCgtEb3VibGVSdWxlcxKEAQoFY29uc3QYASABKAFCdcJIcgpwCgxkb3VibGUuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKgAQoCbHQYAiABKAFCkQHCSI0BCooBCglkb3VibGUubHQafSFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQpPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASsAEKA2x0ZRgDIAEoAUKgAcJInAEKmQEKCmRvdWJsZS5sdGUaigEhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlKT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABL0BwoCZ3QYBCABKAFC5QfCSOEHCo4BCglkb3VibGUuZ3QagAEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwrEAQoMZG91YmxlLmd0X2x0GrMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKzgEKFmRvdWJsZS5ndF9sdF9leGNsdXNpdmUaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrUAQoNZG91YmxlLmd0X2x0ZRrCAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCt4BChdkb3VibGUuZ3RfbHRlX2V4Y2x1c2l2ZRrCAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESvwgKA2d0ZRgFIAEoAUKvCMJIqwgKnAEKCmRvdWJsZS5ndGUajQEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycK0wEKDWRvdWJsZS5ndGVfbHQawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCt0BChdkb3VibGUuZ3RlX2x0X2V4Y2x1c2l2ZRrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK4wEKDmRvdWJsZS5ndGVfbHRlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrtAQoYZG91YmxlLmd0ZV9sdGVfZXhjbHVzaXZlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoAUJ0wkhxCm8KCWRvdWJsZS5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygBQmfCSGQKYgoNZG91YmxlLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEnYKBmZpbml0ZRgIIAEoCEJmwkhjCmEKDWRvdWJsZS5maW5pdGUaUHJ1bGVzLmZpbml0ZSA/ICh0aGlzLmlzTmFuKCkgfHwgdGhpcy5pc0luZigpID8gJ3ZhbHVlIG11c3QgYmUgZmluaXRlJyA6ICcnKSA6ICcnEiwKB2V4YW1wbGUYCSADKAFCG8JIGAoWCg5kb3VibGUuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4ijBUKCkludDMyUnVsZXMSgwEKBWNvbnN0GAEgASgFQnTCSHEKbwoLaW50MzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKKAQoCbHQYAiABKAVCfMJIeQp3CghpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKcAQoDbHRlGAMgASgFQowBwkiIAQqFAQoJaW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKXBwoCZ3QYBCABKAVCiAfCSIQHCnoKCGludDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqzAQoLaW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrsBChVpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrDAQoMaW50MzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrLAQoWaW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES4wcKA2d0ZRgFIAEoBULTB8JIzwcKiAEKCWludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsIBCgxpbnQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKygEKFmludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtIBCg1pbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtoBChdpbnQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ/CgJpbhgGIAMoBUJzwkhwCm4KCGludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YByADKAVCZsJIYwphCgxpbnQzMi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIrCgdleGFtcGxlGAggAygFQhrCSBcKFQoNaW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4ijBUKCkludDY0UnVsZXMSgwEKBWNvbnN0GAEgASgDQnTCSHEKbwoLaW50NjQuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKKAQoCbHQYAiABKANCfMJIeQp3CghpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKcAQoDbHRlGAMgASgDQowBwkiIAQqFAQoJaW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKXBwoCZ3QYBCABKANCiAfCSIQHCnoKCGludDY0Lmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqzAQoLaW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrsBChVpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrDAQoMaW50NjQuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrLAQoWaW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES4wcKA2d0ZRgFIAEoA0LTB8JIzwcKiAEKCWludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsIBCgxpbnQ2NC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKygEKFmludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtIBCg1pbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtoBChdpbnQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ/CgJpbhgGIAMoA0JzwkhwCm4KCGludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YByADKANCZsJIYwphCgxpbnQ2NC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIrCgdleGFtcGxlGAkgAygDQhrCSBcKFQoNaW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1VJbnQzMlJ1bGVzEoQBCgVjb25zdBgBIAEoDUJ1wkhyCnAKDHVpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoDUJ9wkh6CngKCXVpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgNQo0BwkiJAQqGAQoKdWludDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgNQo0HwkiJBwp7Cgl1aW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgx1aW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZ1aW50MzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXVpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChd1aW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoDULYB8JI1AcKiQEKCnVpbnQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNdWludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXdWludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg51aW50MzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYdWludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoDUJ0wkhxCm8KCXVpbnQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygNQmfCSGQKYgoNdWludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKA1CG8JIGAoWCg51aW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1VJbnQ2NFJ1bGVzEoQBCgVjb25zdBgBIAEoBEJ1wkhyCnAKDHVpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoBEJ9wkh6CngKCXVpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgEQo0BwkiJAQqGAQoKdWludDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgEQo0HwkiJBwp7Cgl1aW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgx1aW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZ1aW50NjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXVpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChd1aW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoBELYB8JI1AcKiQEKCnVpbnQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNdWludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXdWludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg51aW50NjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYdWludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoBEJ0wkhxCm8KCXVpbnQ2NC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygEQmfCSGQKYgoNdWludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKARCG8JIGAoWCg51aW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1NJbnQzMlJ1bGVzEoQBCgVjb25zdBgBIAEoEUJ1wkhyCnAKDHNpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoEUJ9wkh6CngKCXNpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgRQo0BwkiJAQqGAQoKc2ludDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgRQo0HwkiJBwp7CglzaW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgxzaW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZzaW50MzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXNpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChdzaW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoEULYB8JI1AcKiQEKCnNpbnQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNc2ludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXc2ludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg5zaW50MzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYc2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoEUJ0wkhxCm8KCXNpbnQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygRQmfCSGQKYgoNc2ludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKBFCG8JIGAoWCg5zaW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1NJbnQ2NFJ1bGVzEoQBCgVjb25zdBgBIAEoEkJ1wkhyCnAKDHNpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoEkJ9wkh6CngKCXNpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgSQo0BwkiJAQqGAQoKc2ludDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgSQo0HwkiJBwp7CglzaW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgxzaW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZzaW50NjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXNpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChdzaW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoEkLYB8JI1AcKiQEKCnNpbnQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNc2ludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXc2ludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg5zaW50NjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYc2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoEkJ0wkhxCm8KCXNpbnQ2NC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygSQmfCSGQKYgoNc2ludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKBJCG8JIGAoWCg5zaW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4irxUKDEZpeGVkMzJSdWxlcxKFAQoFY29uc3QYASABKAdCdsJIcwpxCg1maXhlZDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjAEKAmx0GAIgASgHQn7CSHsKeQoKZml4ZWQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKeAQoDbHRlGAMgASgHQo4BwkiKAQqHAQoLZml4ZWQzMi5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEqEHCgJndBgEIAEoB0KSB8JIjgcKfAoKZml4ZWQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtQEKDWZpeGVkMzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr0BChdmaXhlZDMyLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsUBCg5maXhlZDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzQEKGGZpeGVkMzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES7QcKA2d0ZRgFIAEoB0LdB8JI2QcKigEKC2ZpeGVkMzIuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKxAEKDmZpeGVkMzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCswBChhmaXhlZDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtQBCg9maXhlZDMyLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK3AEKGWZpeGVkMzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgQEKAmluGAYgAygHQnXCSHIKcAoKZml4ZWQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSeAoGbm90X2luGAcgAygHQmjCSGUKYwoOZml4ZWQzMi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxItCgdleGFtcGxlGAggAygHQhzCSBkKFwoPZml4ZWQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKvFQoMRml4ZWQ2NFJ1bGVzEoUBCgVjb25zdBgBIAEoBkJ2wkhzCnEKDWZpeGVkNjQuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKMAQoCbHQYAiABKAZCfsJIewp5CgpmaXhlZDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp4BCgNsdGUYAyABKAZCjgHCSIoBCocBCgtmaXhlZDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASoQcKAmd0GAQgASgGQpIHwkiOBwp8CgpmaXhlZDY0Lmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq1AQoNZml4ZWQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvQEKF2ZpeGVkNjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxQEKDmZpeGVkNjQuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrNAQoYZml4ZWQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLtBwoDZ3RlGAUgASgGQt0HwkjZBwqKAQoLZml4ZWQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrEAQoOZml4ZWQ2NC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzAEKGGZpeGVkNjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1AEKD2ZpeGVkNjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrcAQoZZml4ZWQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKBAQoCaW4YBiADKAZCdcJIcgpwCgpmaXhlZDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ4CgZub3RfaW4YByADKAZCaMJIZQpjCg5maXhlZDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi0KB2V4YW1wbGUYCCADKAZCHMJIGQoXCg9maXhlZDY0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIsAVCg1TRml4ZWQzMlJ1bGVzEoYBCgVjb25zdBgBIAEoD0J3wkh0CnIKDnNmaXhlZDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjQEKAmx0GAIgASgPQn/CSHwKegoLc2ZpeGVkMzIubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnwEKA2x0ZRgDIAEoD0KPAcJIiwEKiAEKDHNmaXhlZDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASpgcKAmd0GAQgASgPQpcHwkiTBwp9CgtzZml4ZWQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDnNmaXhlZDMyLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYc2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD3NmaXhlZDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGXNmaXhlZDMyLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEvIHCgNndGUYBSABKA9C4gfCSN4HCosBCgxzZml4ZWQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPc2ZpeGVkMzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlzZml4ZWQzMi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQc2ZpeGVkMzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoac2ZpeGVkMzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESggEKAmluGAYgAygPQnbCSHMKcQoLc2ZpeGVkMzIuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnkKBm5vdF9pbhgHIAMoD0JpwkhmCmQKD3NmaXhlZDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi4KB2V4YW1wbGUYCCADKA9CHcJIGgoYChBzZml4ZWQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLAFQoNU0ZpeGVkNjRSdWxlcxKGAQoFY29uc3QYASABKBBCd8JIdApyCg5zZml4ZWQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEo0BCgJsdBgCIAEoEEJ/wkh8CnoKC3NmaXhlZDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp8BCgNsdGUYAyABKBBCjwHCSIsBCogBCgxzZml4ZWQ2NC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEqYHCgJndBgEIAEoEEKXB8JIkwcKfQoLc2ZpeGVkNjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrYBCg5zZml4ZWQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvgEKGHNmaXhlZDY0Lmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsYBCg9zZml4ZWQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs4BChlzZml4ZWQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLyBwoDZ3RlGAUgASgQQuIHwkjeBwqLAQoMc2ZpeGVkNjQuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKxQEKD3NmaXhlZDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrNAQoZc2ZpeGVkNjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1QEKEHNmaXhlZDY0Lmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK3QEKGnNmaXhlZDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoIBCgJpbhgGIAMoEEJ2wkhzCnEKC3NmaXhlZDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ5CgZub3RfaW4YByADKBBCacJIZgpkCg9zZml4ZWQ2NC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIuCgdleGFtcGxlGAggAygQQh3CSBoKGAoQc2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4ixwEKCUJvb2xSdWxlcxKCAQoFY29uc3QYASABKAhCc8JIcApuCgpib29sLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSKgoHZXhhbXBsZRgCIAMoCEIZwkgWChQKDGJvb2wuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACIpA3CgtTdHJpbmdSdWxlcxKGAQoFY29uc3QYASABKAlCd8JIdApyCgxzdHJpbmcuY29uc3QaYnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgYCVzYCcuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEn4KA2xlbhgTIAEoBEJxwkhuCmwKCnN0cmluZy5sZW4aXnVpbnQodGhpcy5zaXplKCkpICE9IHJ1bGVzLmxlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSAlcyBjaGFyYWN0ZXJzJy5mb3JtYXQoW3J1bGVzLmxlbl0pIDogJycSmQEKB21pbl9sZW4YAiABKARChwHCSIMBCoABCg5zdHJpbmcubWluX2xlbhpudWludCh0aGlzLnNpemUoKSkgPCBydWxlcy5taW5fbGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWluX2xlbl0pIDogJycSlwEKB21heF9sZW4YAyABKARChQHCSIEBCn8KDnN0cmluZy5tYXhfbGVuGm11aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbW9zdCAlcyBjaGFyYWN0ZXJzJy5mb3JtYXQoW3J1bGVzLm1heF9sZW5dKSA6ICcnEpsBCglsZW5fYnl0ZXMYFCABKARChwHCSIMBCoABChBzdHJpbmcubGVuX2J5dGVzGmx1aW50KGJ5dGVzKHRoaXMpLnNpemUoKSkgIT0gcnVsZXMubGVuX2J5dGVzID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLmxlbl9ieXRlc10pIDogJycSowEKCW1pbl9ieXRlcxgEIAEoBEKPAcJIiwEKiAEKEHN0cmluZy5taW5fYnl0ZXMadHVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9ieXRlcyA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5taW5fYnl0ZXNdKSA6ICcnEqIBCgltYXhfYnl0ZXMYBSABKARCjgHCSIoBCocBChBzdHJpbmcubWF4X2J5dGVzGnN1aW50KGJ5dGVzKHRoaXMpLnNpemUoKSkgPiBydWxlcy5tYXhfYnl0ZXMgPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbW9zdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5tYXhfYnl0ZXNdKSA6ICcnEo0BCgdwYXR0ZXJuGAYgASgJQnzCSHkKdwoOc3RyaW5nLnBhdHRlcm4aZSF0aGlzLm1hdGNoZXMocnVsZXMucGF0dGVybikgPyAndmFsdWUgZG9lcyBub3QgbWF0Y2ggcmVnZXggcGF0dGVybiBgJXNgJy5mb3JtYXQoW3J1bGVzLnBhdHRlcm5dKSA6ICcnEoQBCgZwcmVmaXgYByABKAlCdMJIcQpvCg1zdHJpbmcucHJlZml4Gl4hdGhpcy5zdGFydHNXaXRoKHJ1bGVzLnByZWZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBwcmVmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5wcmVmaXhdKSA6ICcnEoIBCgZzdWZmaXgYCCABKAlCcsJIbwptCg1zdHJpbmcuc3VmZml4GlwhdGhpcy5lbmRzV2l0aChydWxlcy5zdWZmaXgpID8gJ3ZhbHVlIGRvZXMgbm90IGhhdmUgc3VmZml4IGAlc2AnLmZvcm1hdChbcnVsZXMuc3VmZml4XSkgOiAnJxKQAQoIY29udGFpbnMYCSABKAlCfsJIewp5Cg9zdHJpbmcuY29udGFpbnMaZiF0aGlzLmNvbnRhaW5zKHJ1bGVzLmNvbnRhaW5zKSA/ICd2YWx1ZSBkb2VzIG5vdCBjb250YWluIHN1YnN0cmluZyBgJXNgJy5mb3JtYXQoW3J1bGVzLmNvbnRhaW5zXSkgOiAnJxKYAQoMbm90X2NvbnRhaW5zGBcgASgJQoEBwkh+CnwKE3N0cmluZy5ub3RfY29udGFpbnMaZXRoaXMuY29udGFpbnMocnVsZXMubm90X2NvbnRhaW5zKSA/ICd2YWx1ZSBjb250YWlucyBzdWJzdHJpbmcgYCVzYCcuZm9ybWF0KFtydWxlcy5ub3RfY29udGFpbnNdKSA6ICcnEoABCgJpbhgKIAMoCUJ0wkhxCm8KCXN0cmluZy5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAsgAygJQmfCSGQKYgoNc3RyaW5nLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEt8BCgVlbWFpbBgMIAEoCELNAcJIyQEKYQoMc3RyaW5nLmVtYWlsEiN2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgZW1haWwgYWRkcmVzcxosIXJ1bGVzLmVtYWlsIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0VtYWlsKCkKZAoSc3RyaW5nLmVtYWlsX2VtcHR5EjJ2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzcxoaIXJ1bGVzLmVtYWlsIHx8IHRoaXMgIT0gJydIABLnAQoIaG9zdG5hbWUYDSABKAhC0gHCSM4BCmUKD3N0cmluZy5ob3N0bmFtZRIedmFsdWUgbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lGjIhcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdG5hbWUoKQplChVzdHJpbmcuaG9zdG5hbWVfZW1wdHkSLXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBob3N0bmFtZRodIXJ1bGVzLmhvc3RuYW1lIHx8IHRoaXMgIT0gJydIABLHAQoCaXAYDiABKAhCuAHCSLQBClUKCXN0cmluZy5pcBIgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQIGFkZHJlc3MaJiFydWxlcy5pcCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCgpClsKD3N0cmluZy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaFyFydWxlcy5pcCB8fCB0aGlzICE9ICcnSAAS1gEKBGlwdjQYDyABKAhCxQHCSMEBClwKC3N0cmluZy5pcHY0EiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzGikhcnVsZXMuaXB2NCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg0KQphChFzdHJpbmcuaXB2NF9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcxoZIXJ1bGVzLmlwdjQgfHwgdGhpcyAhPSAnJ0gAEtYBCgRpcHY2GBAgASgIQsUBwkjBAQpcCgtzdHJpbmcuaXB2NhIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcxopIXJ1bGVzLmlwdjYgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXAoNikKYQoRc3RyaW5nLmlwdjZfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3MaGSFydWxlcy5pcHY2IHx8IHRoaXMgIT0gJydIABK/AQoDdXJpGBEgASgIQq8BwkirAQpRCgpzdHJpbmcudXJpEhl2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVJJGighcnVsZXMudXJpIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc1VyaSgpClYKEHN0cmluZy51cmlfZW1wdHkSKHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVUkkaGCFydWxlcy51cmkgfHwgdGhpcyAhPSAnJ0gAEnAKB3VyaV9yZWYYEiABKAhCXcJIWgpYCg5zdHJpbmcudXJpX3JlZhIjdmFsdWUgbXVzdCBiZSBhIHZhbGlkIFVSSSBSZWZlcmVuY2UaISFydWxlcy51cmlfcmVmIHx8IHRoaXMuaXNVcmlSZWYoKUgAEpACCgdhZGRyZXNzGBUgASgIQvwBwkj4AQqBAQoOc3RyaW5nLmFkZHJlc3MSLXZhbHVlIG11c3QgYmUgYSB2YWxpZCBob3N0bmFtZSwgb3IgaXAgYWRkcmVzcxpAIXJ1bGVzLmFkZHJlc3MgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdG5hbWUoKSB8fCB0aGlzLmlzSXAoKQpyChRzdHJpbmcuYWRkcmVzc19lbXB0eRI8dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGhwhcnVsZXMuYWRkcmVzcyB8fCB0aGlzICE9ICcnSAASmAIKBHV1aWQYFiABKAhChwLCSIMCCqUBCgtzdHJpbmcudXVpZBIadmFsdWUgbXVzdCBiZSBhIHZhbGlkIFVVSUQaeiFydWxlcy51dWlkIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9JCcpClkKEXN0cmluZy51dWlkX2VtcHR5Eil2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgVVVJRBoZIXJ1bGVzLnV1aWQgfHwgdGhpcyAhPSAnJ0gAEvABCgV0dXVpZBghIAEoCELeAcJI2gEKcwoMc3RyaW5nLnR1dWlkEiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgdHJpbW1lZCBVVUlEGj8hcnVsZXMudHV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXszMn0kJykKYwoSc3RyaW5nLnR1dWlkX2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgdHJpbW1lZCBVVUlEGhohcnVsZXMudHV1aWQgfHwgdGhpcyAhPSAnJ0gAEpYCChFpcF93aXRoX3ByZWZpeGxlbhgaIAEoCEL4AcJI9AEKeAoYc3RyaW5nLmlwX3dpdGhfcHJlZml4bGVuEh92YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgcHJlZml4GjshcnVsZXMuaXBfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoKQp4Ch5zdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW5fZW1wdHkSLnZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUCBwcmVmaXgaJiFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAASzwIKE2lwdjRfd2l0aF9wcmVmaXhsZW4YGyABKAhCrwLCSKsCCpMBChpzdHJpbmcuaXB2NF93aXRoX3ByZWZpeGxlbhI1dmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgYWRkcmVzcyB3aXRoIHByZWZpeCBsZW5ndGgaPiFydWxlcy5pcHY0X3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDQpCpIBCiBzdHJpbmcuaXB2NF93aXRoX3ByZWZpeGxlbl9lbXB0eRJEdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcyB3aXRoIHByZWZpeCBsZW5ndGgaKCFydWxlcy5pcHY0X3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLPAgoTaXB2Nl93aXRoX3ByZWZpeGxlbhgcIAEoCEKvAsJIqwIKkwEKGnN0cmluZy5pcHY2X3dpdGhfcHJlZml4bGVuEjV2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjZfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNikKkgEKIHN0cmluZy5pcHY2X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NiBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjZfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEvIBCglpcF9wcmVmaXgYHSABKAhC3AHCSNgBCmwKEHN0cmluZy5pcF9wcmVmaXgSH3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaNyFydWxlcy5pcF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgodHJ1ZSkKaAoWc3RyaW5nLmlwX3ByZWZpeF9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBoeIXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzICE9ICcnSAASgwIKC2lwdjRfcHJlZml4GB4gASgIQusBwkjnAQp1ChJzdHJpbmcuaXB2NF9wcmVmaXgSIXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IHByZWZpeBo8IXJ1bGVzLmlwdjRfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDQsIHRydWUpCm4KGHN0cmluZy5pcHY0X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgcHJlZml4GiAhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAEoMCCgtpcHY2X3ByZWZpeBgfIAEoCELrAcJI5wEKdQoSc3RyaW5nLmlwdjZfcHJlZml4EiF2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBwcmVmaXgaPCFydWxlcy5pcHY2X3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2LCB0cnVlKQpuChhzdHJpbmcuaXB2Nl9wcmVmaXhfZW1wdHkSMHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IHByZWZpeBogIXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgIT0gJydIABK1AgoNaG9zdF9hbmRfcG9ydBggIAEoCEKbAsJIlwIKmQEKFHN0cmluZy5ob3N0X2FuZF9wb3J0EkF2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaG9zdCAoaG9zdG5hbWUgb3IgSVAgYWRkcmVzcykgYW5kIHBvcnQgcGFpcho+IXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdEFuZFBvcnQodHJ1ZSkKeQoac3RyaW5nLmhvc3RfYW5kX3BvcnRfZW1wdHkSN3ZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBob3N0IGFuZCBwb3J0IHBhaXIaIiFydWxlcy5ob3N0X2FuZF9wb3J0IHx8IHRoaXMgIT0gJydIABKoBQoQd2VsbF9rbm93bl9yZWdleBgYIAEoDjIYLmJ1Zi52YWxpZGF0ZS5Lbm93blJlZ2V4QvEEwkjtBArwAQojc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWUSJnZhbHVlIG11c3QgYmUgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGqABcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAxIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeOj9bMC05YS16QS1aISMkJSZcJyorLS5eX3x+XHg2MF0rJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKyQnKQqNAQopc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWVfZW1wdHkSNXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGilydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDEgfHwgdGhpcyAhPSAnJwrnAQokc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX3ZhbHVlEid2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSFRUUCBoZWFkZXIgdmFsdWUalQFydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDIgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeW15cdTAwMDAtXHUwMDA4XHUwMDBBLVx1MDAxRlx1MDA3Rl0qJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKiQnKUgAEg4KBnN0cmljdBgZIAEoCBIsCgdleGFtcGxlGCIgAygJQhvCSBgKFgoOc3RyaW5nLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkIMCgp3ZWxsX2tub3duIuoQCgpCeXRlc1J1bGVzEoABCgVjb25zdBgBIAEoDEJxwkhuCmwKC2J5dGVzLmNvbnN0Gl10aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGJlICV4Jy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSeAoDbGVuGA0gASgEQmvCSGgKZgoJYnl0ZXMubGVuGll1aW50KHRoaXMuc2l6ZSgpKSAhPSBydWxlcy5sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuXSkgOiAnJxKQAQoHbWluX2xlbhgCIAEoBEJ/wkh8CnoKDWJ5dGVzLm1pbl9sZW4aaXVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX2xlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKIAQoHbWF4X2xlbhgDIAEoBEJ3wkh0CnIKDWJ5dGVzLm1heF9sZW4aYXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICd2YWx1ZSBtdXN0IGJlIGF0IG1vc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSkAEKB3BhdHRlcm4YBCABKAlCf8JIfAp6Cg1ieXRlcy5wYXR0ZXJuGmkhc3RyaW5nKHRoaXMpLm1hdGNoZXMocnVsZXMucGF0dGVybikgPyAndmFsdWUgbXVzdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycSgQEKBnByZWZpeBgFIAEoDEJxwkhuCmwKDGJ5dGVzLnByZWZpeBpcIXRoaXMuc3RhcnRzV2l0aChydWxlcy5wcmVmaXgpID8gJ3ZhbHVlIGRvZXMgbm90IGhhdmUgcHJlZml4ICV4Jy5mb3JtYXQoW3J1bGVzLnByZWZpeF0pIDogJycSfwoGc3VmZml4GAYgASgMQm/CSGwKagoMYnl0ZXMuc3VmZml4GlohdGhpcy5lbmRzV2l0aChydWxlcy5zdWZmaXgpID8gJ3ZhbHVlIGRvZXMgbm90IGhhdmUgc3VmZml4ICV4Jy5mb3JtYXQoW3J1bGVzLnN1ZmZpeF0pIDogJycSgwEKCGNvbnRhaW5zGAcgASgMQnHCSG4KbAoOYnl0ZXMuY29udGFpbnMaWiF0aGlzLmNvbnRhaW5zKHJ1bGVzLmNvbnRhaW5zKSA/ICd2YWx1ZSBkb2VzIG5vdCBjb250YWluICV4Jy5mb3JtYXQoW3J1bGVzLmNvbnRhaW5zXSkgOiAnJxKnAQoCaW4YCCADKAxCmgHCSJYBCpMBCghieXRlcy5pbhqGAWdldEZpZWxkKHJ1bGVzLCAnaW4nKS5zaXplKCkgPiAwICYmICEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgJIAMoDEJmwkhjCmEKDGJ5dGVzLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEusBCgJpcBgKIAEoCELcAcJI2AEKdAoIYnl0ZXMuaXASIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBhZGRyZXNzGkYhcnVsZXMuaXAgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSA0IHx8IHRoaXMuc2l6ZSgpID09IDE2CmAKDmJ5dGVzLmlwX2VtcHR5Ei92YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgYWRkcmVzcxodIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpICE9IDBIABLkAQoEaXB2NBgLIAEoCELTAcJIzwEKZQoKYnl0ZXMuaXB2NBIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgYWRkcmVzcxozIXJ1bGVzLmlwdjQgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSA0CmYKEGJ5dGVzLmlwdjRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY0IGFkZHJlc3MaHyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpICE9IDBIABLlAQoEaXB2NhgMIAEoCELUAcJI0AEKZgoKYnl0ZXMuaXB2NhIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcxo0IXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSAxNgpmChBieXRlcy5pcHY2X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NiBhZGRyZXNzGh8hcnVsZXMuaXB2NiB8fCB0aGlzLnNpemUoKSAhPSAwSAASKwoHZXhhbXBsZRgOIAMoDEIawkgXChUKDWJ5dGVzLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkIMCgp3ZWxsX2tub3duItQDCglFbnVtUnVsZXMSggEKBWNvbnN0GAEgASgFQnPCSHAKbgoKZW51bS5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEhQKDGRlZmluZWRfb25seRgCIAEoCBJ+CgJpbhgDIAMoBUJywkhvCm0KB2VudW0uaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnUKBm5vdF9pbhgEIAMoBUJlwkhiCmAKC2VudW0ubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSKgoHZXhhbXBsZRgFIAMoBUIZwkgWChQKDGVudW0uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACIvsDCg1SZXBlYXRlZFJ1bGVzEp4BCgltaW5faXRlbXMYASABKARCigHCSIYBCoMBChJyZXBlYXRlZC5taW5faXRlbXMabXVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX2l0ZW1zID8gJ3ZhbHVlIG11c3QgY29udGFpbiBhdCBsZWFzdCAlZCBpdGVtKHMpJy5mb3JtYXQoW3J1bGVzLm1pbl9pdGVtc10pIDogJycSogEKCW1heF9pdGVtcxgCIAEoBEKOAcJIigEKhwEKEnJlcGVhdGVkLm1heF9pdGVtcxpxdWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfaXRlbXMgPyAndmFsdWUgbXVzdCBjb250YWluIG5vIG1vcmUgdGhhbiAlcyBpdGVtKHMpJy5mb3JtYXQoW3J1bGVzLm1heF9pdGVtc10pIDogJycScAoGdW5pcXVlGAMgASgIQmDCSF0KWwoPcmVwZWF0ZWQudW5pcXVlEihyZXBlYXRlZCB2YWx1ZSBtdXN0IGNvbnRhaW4gdW5pcXVlIGl0ZW1zGh4hcnVsZXMudW5pcXVlIHx8IHRoaXMudW5pcXVlKCkSJwoFaXRlbXMYBCABKAsyGC5idWYudmFsaWRhdGUuRmllbGRSdWxlcyoJCOgHEICAgIACIooDCghNYXBSdWxlcxKPAQoJbWluX3BhaXJzGAEgASgEQnzCSHkKdwoNbWFwLm1pbl9wYWlycxpmdWludCh0aGlzLnNpemUoKSkgPCBydWxlcy5taW5fcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbGVhc3QgJWQgZW50cmllcycuZm9ybWF0KFtydWxlcy5taW5fcGFpcnNdKSA6ICcnEo4BCgltYXhfcGFpcnMYAiABKARCe8JIeAp2Cg1tYXAubWF4X3BhaXJzGmV1aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9wYWlycyA/ICdtYXAgbXVzdCBiZSBhdCBtb3N0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWF4X3BhaXJzXSkgOiAnJxImCgRrZXlzGAQgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMSKAoGdmFsdWVzGAUgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMqCQjoBxCAgICAAiImCghBbnlSdWxlcxIKCgJpbhgCIAMoCRIOCgZub3RfaW4YAyADKAkimRcKDUR1cmF0aW9uUnVsZXMSoQEKBWNvbnN0GAIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnfCSHQKcgoOZHVyYXRpb24uY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKoAQoCbHQYAyABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25Cf8JIfAp6CgtkdXJhdGlvbi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABK6AQoDbHRlGAQgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQo8BwkiLAQqIAQoMZHVyYXRpb24ubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABLBBwoCZ3QYBSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25ClwfCSJMHCn0KC2R1cmF0aW9uLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq2AQoOZHVyYXRpb24uZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BChhkdXJhdGlvbi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrGAQoPZHVyYXRpb24uZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrOAQoZZHVyYXRpb24uZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESjQgKA2d0ZRgGIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkLiB8JI3gcKiwEKDGR1cmF0aW9uLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsUBCg9kdXJhdGlvbi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKGWR1cmF0aW9uLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtUBChBkdXJhdGlvbi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt0BChpkdXJhdGlvbi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKdAQoCaW4YByADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CdsJIcwpxCgtkdXJhdGlvbi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSlAEKBm5vdF9pbhgIIAMoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJpwkhmCmQKD2R1cmF0aW9uLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEkkKB2V4YW1wbGUYCSADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CHcJIGgoYChBkdXJhdGlvbi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKSGAoOVGltZXN0YW1wUnVsZXMSowEKBWNvbnN0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEJ4wkh1CnMKD3RpbWVzdGFtcC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEqsBCgJsdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCgAHCSH0KewoMdGltZXN0YW1wLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAErwBCgNsdGUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQpABwkiMAQqJAQoNdGltZXN0YW1wLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASbAoGbHRfbm93GAcgASgIQlrCSFcKVQoQdGltZXN0YW1wLmx0X25vdxpBKHJ1bGVzLmx0X25vdyAmJiB0aGlzID4gbm93KSA/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBub3cnIDogJydIABLHBwoCZ3QYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQpwHwkiYBwp+Cgx0aW1lc3RhbXAuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrcBCg90aW1lc3RhbXAuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr8BChl0aW1lc3RhbXAuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxwEKEHRpbWVzdGFtcC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs8BChp0aW1lc3RhbXAuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESkwgKA2d0ZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBC5wfCSOMHCowBCg10aW1lc3RhbXAuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKxgEKEHRpbWVzdGFtcC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzgEKGnRpbWVzdGFtcC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrWAQoRdGltZXN0YW1wLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK3gEKG3RpbWVzdGFtcC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJvCgZndF9ub3cYCCABKAhCXcJIWgpYChB0aW1lc3RhbXAuZ3Rfbm93GkQocnVsZXMuZ3Rfbm93ICYmIHRoaXMgPCBub3cpID8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG5vdycgOiAnJ0gBErgBCgZ3aXRoaW4YCSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CjAHCSIgBCoUBChB0aW1lc3RhbXAud2l0aGluGnF0aGlzIDwgbm93LXJ1bGVzLndpdGhpbiB8fCB0aGlzID4gbm93K3J1bGVzLndpdGhpbiA/ICd2YWx1ZSBtdXN0IGJlIHdpdGhpbiAlcyBvZiBub3cnLmZvcm1hdChbcnVsZXMud2l0aGluXSkgOiAnJxJLCgdleGFtcGxlGAogAygLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIewkgbChkKEXRpbWVzdGFtcC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiI5CgpWaW9sYXRpb25zEisKCnZpb2xhdGlvbnMYASADKAsyFy5idWYudmFsaWRhdGUuVmlvbGF0aW9uIp8BCglWaW9sYXRpb24SJgoFZmllbGQYBSABKAsyFy5idWYudmFsaWRhdGUuRmllbGRQYXRoEiUKBHJ1bGUYBiABKAsyFy5idWYudmFsaWRhdGUuRmllbGRQYXRoEg8KB3J1bGVfaWQYAiABKAkSDwoHbWVzc2FnZRgDIAEoCRIPCgdmb3Jfa2V5GAQgASgISgQIARACUgpmaWVsZF9wYXRoIj0KCUZpZWxkUGF0aBIwCghlbGVtZW50cxgBIAMoCzIeLmJ1Zi52YWxpZGF0ZS5GaWVsZFBhdGhFbGVtZW50IukCChBGaWVsZFBhdGhFbGVtZW50EhQKDGZpZWxkX251bWJlchgBIAEoBRISCgpmaWVsZF9uYW1lGAIgASgJEj4KCmZpZWxkX3R5cGUYAyABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRI8CghrZXlfdHlwZRgEIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlEj4KCnZhbHVlX3R5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRIPCgVpbmRleBgGIAEoBEgAEhIKCGJvb2xfa2V5GAcgASgISAASEQoHaW50X2tleRgIIAEoA0gAEhIKCHVpbnRfa2V5GAkgASgESAASFAoKc3RyaW5nX2tleRgKIAEoCUgAQgsKCXN1YnNjcmlwdCqhAQoGSWdub3JlEhYKEklHTk9SRV9VTlNQRUNJRklFRBAAEhgKFElHTk9SRV9JRl9aRVJPX1ZBTFVFEAESEQoNSUdOT1JFX0FMV0FZUxADIgQIAhACKgxJR05PUkVfRU1QVFkqDklHTk9SRV9ERUZBVUxUKhdJR05PUkVfSUZfREVGQVVMVF9WQUxVRSoVSUdOT1JFX0lGX1VOUE9QVUxBVEVEKm4KCktub3duUmVnZXgSGwoXS05PV05fUkVHRVhfVU5TUEVDSUZJRUQQABIgChxLTk9XTl9SRUdFWF9IVFRQX0hFQURFUl9OQU1FEAESIQodS05PV05fUkVHRVhfSFRUUF9IRUFERVJfVkFMVUUQAjpWCgdtZXNzYWdlEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGIcJIAEoCzIaLmJ1Zi52YWxpZGF0ZS5NZXNzYWdlUnVsZXNSB21lc3NhZ2U6TgoFb25lb2YSHS5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zGIcJIAEoCzIYLmJ1Zi52YWxpZGF0ZS5PbmVvZlJ1bGVzUgVvbmVvZjpOCgVmaWVsZBIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYhwkgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXNSBWZpZWxkOl0KCnByZWRlZmluZWQSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGIgJIAEoCzIdLmJ1Zi52YWxpZGF0ZS5QcmVkZWZpbmVkUnVsZXNSCnByZWRlZmluZWRCuwEKEGNvbS5idWYudmFsaWRhdGVCDVZhbGlkYXRlUHJvdG9QAVpHYnVmLmJ1aWxkL2dlbi9nby9idWZidWlsZC9wcm90b3ZhbGlkYXRlL3Byb3RvY29sYnVmZmVycy9nby9idWYvdmFsaWRhdGWiAgNCVliqAgxCdWYuVmFsaWRhdGXKAgxCdWZcVmFsaWRhdGXiAhhCdWZcVmFsaWRhdGVcR1BCTWV0YWRhdGHqAg1CdWY6OlZhbGlkYXRl", [file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_timestamp]);
30
+
31
+ /**
32
+ * `Rule` represents a validation rule written in the Common Expression
33
+ * Language (CEL) syntax. Each Rule includes a unique identifier, an
34
+ * optional error message, and the CEL expression to evaluate. For more
35
+ * information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
36
+ *
37
+ * ```proto
38
+ * message Foo {
39
+ * option (buf.validate.message).cel = {
40
+ * id: "foo.bar"
41
+ * message: "bar must be greater than 0"
42
+ * expression: "this.bar > 0"
43
+ * };
44
+ * int32 bar = 1;
45
+ * }
46
+ * ```
47
+ *
48
+ * @generated from message buf.validate.Rule
49
+ */
50
+ export type Rule = Message<"buf.validate.Rule"> & {
51
+ /**
52
+ * `id` is a string that serves as a machine-readable name for this Rule.
53
+ * It should be unique within its scope, which could be either a message or a field.
54
+ *
55
+ * @generated from field: optional string id = 1;
56
+ */
57
+ id: string;
58
+
59
+ /**
60
+ * `message` is an optional field that provides a human-readable error message
61
+ * for this Rule when the CEL expression evaluates to false. If a
62
+ * non-empty message is provided, any strings resulting from the CEL
63
+ * expression evaluation are ignored.
64
+ *
65
+ * @generated from field: optional string message = 2;
66
+ */
67
+ message: string;
68
+
69
+ /**
70
+ * `expression` is the actual CEL expression that will be evaluated for
71
+ * validation. This string must resolve to either a boolean or a string
72
+ * value. If the expression evaluates to false or a non-empty string, the
73
+ * validation is considered failed, and the message is rejected.
74
+ *
75
+ * @generated from field: optional string expression = 3;
76
+ */
77
+ expression: string;
78
+ };
79
+
80
+ /**
81
+ * Describes the message buf.validate.Rule.
82
+ * Use `create(RuleSchema)` to create a new message.
83
+ */
84
+ export const RuleSchema: GenMessage<Rule> = /*@__PURE__*/
85
+ messageDesc(file_buf_validate_validate, 0);
86
+
87
+ /**
88
+ * MessageRules represents validation rules that are applied to the entire message.
89
+ * It includes disabling options and a list of Rule messages representing Common Expression Language (CEL) validation rules.
90
+ *
91
+ * @generated from message buf.validate.MessageRules
92
+ */
93
+ export type MessageRules = Message<"buf.validate.MessageRules"> & {
94
+ /**
95
+ * `cel` is a repeated field of type Rule. Each Rule specifies a validation rule to be applied to this message.
96
+ * These rules are written in Common Expression Language (CEL) syntax. For more information,
97
+ * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
98
+ *
99
+ *
100
+ * ```proto
101
+ * message MyMessage {
102
+ * // The field `foo` must be greater than 42.
103
+ * option (buf.validate.message).cel = {
104
+ * id: "my_message.value",
105
+ * message: "value must be greater than 42",
106
+ * expression: "this.foo > 42",
107
+ * };
108
+ * optional int32 foo = 1;
109
+ * }
110
+ * ```
111
+ *
112
+ * @generated from field: repeated buf.validate.Rule cel = 3;
113
+ */
114
+ cel: Rule[];
115
+
116
+ /**
117
+ * `oneof` is a repeated field of type MessageOneofRule that specifies a list of fields
118
+ * of which at most one can be present. If `required` is also specified, then exactly one
119
+ * of the specified fields _must_ be present.
120
+ *
121
+ * This will enforce oneof-like constraints with a few features not provided by
122
+ * actual Protobuf oneof declarations:
123
+ * 1. Repeated and map fields are allowed in this validation. In a Protobuf oneof,
124
+ * only scalar fields are allowed.
125
+ * 2. Fields with implicit presence are allowed. In a Protobuf oneof, all member
126
+ * fields have explicit presence. This means that, for the purpose of determining
127
+ * how many fields are set, explicitly setting such a field to its zero value is
128
+ * effectively the same as not setting it at all.
129
+ * 3. This will always generate validation errors for a message unmarshalled from
130
+ * serialized data that sets more than one field. With a Protobuf oneof, when
131
+ * multiple fields are present in the serialized form, earlier values are usually
132
+ * silently ignored when unmarshalling, with only the last field being set when
133
+ * unmarshalling completes.
134
+ *
135
+ * Note that adding a field to a `oneof` will also set the IGNORE_IF_ZERO_VALUE on the fields. This means
136
+ * only the field that is set will be validated and the unset fields are not validated according to the field rules.
137
+ * This behavior can be overridden by setting `ignore` against a field.
138
+ *
139
+ * ```proto
140
+ * message MyMessage {
141
+ * // Only one of `field1` or `field2` _can_ be present in this message.
142
+ * option (buf.validate.message).oneof = { fields: ["field1", "field2"] };
143
+ * // Exactly one of `field3` or `field4` _must_ be present in this message.
144
+ * option (buf.validate.message).oneof = { fields: ["field3", "field4"], required: true };
145
+ * string field1 = 1;
146
+ * bytes field2 = 2;
147
+ * bool field3 = 3;
148
+ * int32 field4 = 4;
149
+ * }
150
+ * ```
151
+ *
152
+ * @generated from field: repeated buf.validate.MessageOneofRule oneof = 4;
153
+ */
154
+ oneof: MessageOneofRule[];
155
+ };
156
+
157
+ /**
158
+ * Describes the message buf.validate.MessageRules.
159
+ * Use `create(MessageRulesSchema)` to create a new message.
160
+ */
161
+ export const MessageRulesSchema: GenMessage<MessageRules> = /*@__PURE__*/
162
+ messageDesc(file_buf_validate_validate, 1);
163
+
164
+ /**
165
+ * @generated from message buf.validate.MessageOneofRule
166
+ */
167
+ export type MessageOneofRule = Message<"buf.validate.MessageOneofRule"> & {
168
+ /**
169
+ * A list of field names to include in the oneof. All field names must be
170
+ * defined in the message. At least one field must be specified, and
171
+ * duplicates are not permitted.
172
+ *
173
+ * @generated from field: repeated string fields = 1;
174
+ */
175
+ fields: string[];
176
+
177
+ /**
178
+ * If true, one of the fields specified _must_ be set.
179
+ *
180
+ * @generated from field: optional bool required = 2;
181
+ */
182
+ required: boolean;
183
+ };
184
+
185
+ /**
186
+ * Describes the message buf.validate.MessageOneofRule.
187
+ * Use `create(MessageOneofRuleSchema)` to create a new message.
188
+ */
189
+ export const MessageOneofRuleSchema: GenMessage<MessageOneofRule> = /*@__PURE__*/
190
+ messageDesc(file_buf_validate_validate, 2);
191
+
192
+ /**
193
+ * The `OneofRules` message type enables you to manage rules for
194
+ * oneof fields in your protobuf messages.
195
+ *
196
+ * @generated from message buf.validate.OneofRules
197
+ */
198
+ export type OneofRules = Message<"buf.validate.OneofRules"> & {
199
+ /**
200
+ * If `required` is true, exactly one field of the oneof must be set. A
201
+ * validation error is returned if no fields in the oneof are set. Further rules
202
+ * should be placed on the fields themselves to ensure they are valid values,
203
+ * such as `min_len` or `gt`.
204
+ *
205
+ * ```proto
206
+ * message MyMessage {
207
+ * oneof value {
208
+ * // Either `a` or `b` must be set. If `a` is set, it must also be
209
+ * // non-empty; whereas if `b` is set, it can still be an empty string.
210
+ * option (buf.validate.oneof).required = true;
211
+ * string a = 1 [(buf.validate.field).string.min_len = 1];
212
+ * string b = 2;
213
+ * }
214
+ * }
215
+ * ```
216
+ *
217
+ * @generated from field: optional bool required = 1;
218
+ */
219
+ required: boolean;
220
+ };
221
+
222
+ /**
223
+ * Describes the message buf.validate.OneofRules.
224
+ * Use `create(OneofRulesSchema)` to create a new message.
225
+ */
226
+ export const OneofRulesSchema: GenMessage<OneofRules> = /*@__PURE__*/
227
+ messageDesc(file_buf_validate_validate, 3);
228
+
229
+ /**
230
+ * FieldRules encapsulates the rules for each type of field. Depending on
231
+ * the field, the correct set should be used to ensure proper validations.
232
+ *
233
+ * @generated from message buf.validate.FieldRules
234
+ */
235
+ export type FieldRules = Message<"buf.validate.FieldRules"> & {
236
+ /**
237
+ * `cel` is a repeated field used to represent a textual expression
238
+ * in the Common Expression Language (CEL) syntax. For more information,
239
+ * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
240
+ *
241
+ * ```proto
242
+ * message MyMessage {
243
+ * // The field `value` must be greater than 42.
244
+ * optional int32 value = 1 [(buf.validate.field).cel = {
245
+ * id: "my_message.value",
246
+ * message: "value must be greater than 42",
247
+ * expression: "this > 42",
248
+ * }];
249
+ * }
250
+ * ```
251
+ *
252
+ * @generated from field: repeated buf.validate.Rule cel = 23;
253
+ */
254
+ cel: Rule[];
255
+
256
+ /**
257
+ * If `required` is true, the field must be set. A validation error is returned
258
+ * if the field is not set.
259
+ *
260
+ * ```proto
261
+ * syntax="proto3";
262
+ *
263
+ * message FieldsWithPresence {
264
+ * // Requires any string to be set, including the empty string.
265
+ * optional string link = 1 [
266
+ * (buf.validate.field).required = true
267
+ * ];
268
+ * // Requires true or false to be set.
269
+ * optional bool disabled = 2 [
270
+ * (buf.validate.field).required = true
271
+ * ];
272
+ * // Requires a message to be set, including the empty message.
273
+ * SomeMessage msg = 4 [
274
+ * (buf.validate.field).required = true
275
+ * ];
276
+ * }
277
+ * ```
278
+ *
279
+ * All fields in the example above track presence. By default, Protovalidate
280
+ * ignores rules on those fields if no value is set. `required` ensures that
281
+ * the fields are set and valid.
282
+ *
283
+ * Fields that don't track presence are always validated by Protovalidate,
284
+ * whether they are set or not. It is not necessary to add `required`. It
285
+ * can be added to indicate that the field cannot be the zero value.
286
+ *
287
+ * ```proto
288
+ * syntax="proto3";
289
+ *
290
+ * message FieldsWithoutPresence {
291
+ * // `string.email` always applies, even to an empty string.
292
+ * string link = 1 [
293
+ * (buf.validate.field).string.email = true
294
+ * ];
295
+ * // `repeated.min_items` always applies, even to an empty list.
296
+ * repeated string labels = 2 [
297
+ * (buf.validate.field).repeated.min_items = 1
298
+ * ];
299
+ * // `required`, for fields that don't track presence, indicates
300
+ * // the value of the field can't be the zero value.
301
+ * int32 zero_value_not_allowed = 3 [
302
+ * (buf.validate.field).required = true
303
+ * ];
304
+ * }
305
+ * ```
306
+ *
307
+ * To learn which fields track presence, see the
308
+ * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).
309
+ *
310
+ * Note: While field rules can be applied to repeated items, map keys, and map
311
+ * values, the elements are always considered to be set. Consequently,
312
+ * specifying `repeated.items.required` is redundant.
313
+ *
314
+ * @generated from field: optional bool required = 25;
315
+ */
316
+ required: boolean;
317
+
318
+ /**
319
+ * Ignore validation rules on the field if its value matches the specified
320
+ * criteria. See the `Ignore` enum for details.
321
+ *
322
+ * ```proto
323
+ * message UpdateRequest {
324
+ * // The uri rule only applies if the field is not an empty string.
325
+ * string url = 1 [
326
+ * (buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE,
327
+ * (buf.validate.field).string.uri = true
328
+ * ];
329
+ * }
330
+ * ```
331
+ *
332
+ * @generated from field: optional buf.validate.Ignore ignore = 27;
333
+ */
334
+ ignore: Ignore;
335
+
336
+ /**
337
+ * @generated from oneof buf.validate.FieldRules.type
338
+ */
339
+ type: {
340
+ /**
341
+ * Scalar Field Types
342
+ *
343
+ * @generated from field: buf.validate.FloatRules float = 1;
344
+ */
345
+ value: FloatRules;
346
+ case: "float";
347
+ } | {
348
+ /**
349
+ * @generated from field: buf.validate.DoubleRules double = 2;
350
+ */
351
+ value: DoubleRules;
352
+ case: "double";
353
+ } | {
354
+ /**
355
+ * @generated from field: buf.validate.Int32Rules int32 = 3;
356
+ */
357
+ value: Int32Rules;
358
+ case: "int32";
359
+ } | {
360
+ /**
361
+ * @generated from field: buf.validate.Int64Rules int64 = 4;
362
+ */
363
+ value: Int64Rules;
364
+ case: "int64";
365
+ } | {
366
+ /**
367
+ * @generated from field: buf.validate.UInt32Rules uint32 = 5;
368
+ */
369
+ value: UInt32Rules;
370
+ case: "uint32";
371
+ } | {
372
+ /**
373
+ * @generated from field: buf.validate.UInt64Rules uint64 = 6;
374
+ */
375
+ value: UInt64Rules;
376
+ case: "uint64";
377
+ } | {
378
+ /**
379
+ * @generated from field: buf.validate.SInt32Rules sint32 = 7;
380
+ */
381
+ value: SInt32Rules;
382
+ case: "sint32";
383
+ } | {
384
+ /**
385
+ * @generated from field: buf.validate.SInt64Rules sint64 = 8;
386
+ */
387
+ value: SInt64Rules;
388
+ case: "sint64";
389
+ } | {
390
+ /**
391
+ * @generated from field: buf.validate.Fixed32Rules fixed32 = 9;
392
+ */
393
+ value: Fixed32Rules;
394
+ case: "fixed32";
395
+ } | {
396
+ /**
397
+ * @generated from field: buf.validate.Fixed64Rules fixed64 = 10;
398
+ */
399
+ value: Fixed64Rules;
400
+ case: "fixed64";
401
+ } | {
402
+ /**
403
+ * @generated from field: buf.validate.SFixed32Rules sfixed32 = 11;
404
+ */
405
+ value: SFixed32Rules;
406
+ case: "sfixed32";
407
+ } | {
408
+ /**
409
+ * @generated from field: buf.validate.SFixed64Rules sfixed64 = 12;
410
+ */
411
+ value: SFixed64Rules;
412
+ case: "sfixed64";
413
+ } | {
414
+ /**
415
+ * @generated from field: buf.validate.BoolRules bool = 13;
416
+ */
417
+ value: BoolRules;
418
+ case: "bool";
419
+ } | {
420
+ /**
421
+ * @generated from field: buf.validate.StringRules string = 14;
422
+ */
423
+ value: StringRules;
424
+ case: "string";
425
+ } | {
426
+ /**
427
+ * @generated from field: buf.validate.BytesRules bytes = 15;
428
+ */
429
+ value: BytesRules;
430
+ case: "bytes";
431
+ } | {
432
+ /**
433
+ * Complex Field Types
434
+ *
435
+ * @generated from field: buf.validate.EnumRules enum = 16;
436
+ */
437
+ value: EnumRules;
438
+ case: "enum";
439
+ } | {
440
+ /**
441
+ * @generated from field: buf.validate.RepeatedRules repeated = 18;
442
+ */
443
+ value: RepeatedRules;
444
+ case: "repeated";
445
+ } | {
446
+ /**
447
+ * @generated from field: buf.validate.MapRules map = 19;
448
+ */
449
+ value: MapRules;
450
+ case: "map";
451
+ } | {
452
+ /**
453
+ * Well-Known Field Types
454
+ *
455
+ * @generated from field: buf.validate.AnyRules any = 20;
456
+ */
457
+ value: AnyRules;
458
+ case: "any";
459
+ } | {
460
+ /**
461
+ * @generated from field: buf.validate.DurationRules duration = 21;
462
+ */
463
+ value: DurationRules;
464
+ case: "duration";
465
+ } | {
466
+ /**
467
+ * @generated from field: buf.validate.TimestampRules timestamp = 22;
468
+ */
469
+ value: TimestampRules;
470
+ case: "timestamp";
471
+ } | { case: undefined; value?: undefined };
472
+ };
473
+
474
+ /**
475
+ * Describes the message buf.validate.FieldRules.
476
+ * Use `create(FieldRulesSchema)` to create a new message.
477
+ */
478
+ export const FieldRulesSchema: GenMessage<FieldRules> = /*@__PURE__*/
479
+ messageDesc(file_buf_validate_validate, 4);
480
+
481
+ /**
482
+ * PredefinedRules are custom rules that can be re-used with
483
+ * multiple fields.
484
+ *
485
+ * @generated from message buf.validate.PredefinedRules
486
+ */
487
+ export type PredefinedRules = Message<"buf.validate.PredefinedRules"> & {
488
+ /**
489
+ * `cel` is a repeated field used to represent a textual expression
490
+ * in the Common Expression Language (CEL) syntax. For more information,
491
+ * [see our documentation](https://buf.build/docs/protovalidate/schemas/predefined-rules/).
492
+ *
493
+ * ```proto
494
+ * message MyMessage {
495
+ * // The field `value` must be greater than 42.
496
+ * optional int32 value = 1 [(buf.validate.predefined).cel = {
497
+ * id: "my_message.value",
498
+ * message: "value must be greater than 42",
499
+ * expression: "this > 42",
500
+ * }];
501
+ * }
502
+ * ```
503
+ *
504
+ * @generated from field: repeated buf.validate.Rule cel = 1;
505
+ */
506
+ cel: Rule[];
507
+ };
508
+
509
+ /**
510
+ * Describes the message buf.validate.PredefinedRules.
511
+ * Use `create(PredefinedRulesSchema)` to create a new message.
512
+ */
513
+ export const PredefinedRulesSchema: GenMessage<PredefinedRules> = /*@__PURE__*/
514
+ messageDesc(file_buf_validate_validate, 5);
515
+
516
+ /**
517
+ * FloatRules describes the rules applied to `float` values. These
518
+ * rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type.
519
+ *
520
+ * @generated from message buf.validate.FloatRules
521
+ */
522
+ export type FloatRules = Message<"buf.validate.FloatRules"> & {
523
+ /**
524
+ * `const` requires the field value to exactly match the specified value. If
525
+ * the field value doesn't match, an error message is generated.
526
+ *
527
+ * ```proto
528
+ * message MyFloat {
529
+ * // value must equal 42.0
530
+ * float value = 1 [(buf.validate.field).float.const = 42.0];
531
+ * }
532
+ * ```
533
+ *
534
+ * @generated from field: optional float const = 1;
535
+ */
536
+ const: number;
537
+
538
+ /**
539
+ * @generated from oneof buf.validate.FloatRules.less_than
540
+ */
541
+ lessThan: {
542
+ /**
543
+ * `lt` requires the field value to be less than the specified value (field <
544
+ * value). If the field value is equal to or greater than the specified value,
545
+ * an error message is generated.
546
+ *
547
+ * ```proto
548
+ * message MyFloat {
549
+ * // value must be less than 10.0
550
+ * float value = 1 [(buf.validate.field).float.lt = 10.0];
551
+ * }
552
+ * ```
553
+ *
554
+ * @generated from field: float lt = 2;
555
+ */
556
+ value: number;
557
+ case: "lt";
558
+ } | {
559
+ /**
560
+ * `lte` requires the field value to be less than or equal to the specified
561
+ * value (field <= value). If the field value is greater than the specified
562
+ * value, an error message is generated.
563
+ *
564
+ * ```proto
565
+ * message MyFloat {
566
+ * // value must be less than or equal to 10.0
567
+ * float value = 1 [(buf.validate.field).float.lte = 10.0];
568
+ * }
569
+ * ```
570
+ *
571
+ * @generated from field: float lte = 3;
572
+ */
573
+ value: number;
574
+ case: "lte";
575
+ } | { case: undefined; value?: undefined };
576
+
577
+ /**
578
+ * @generated from oneof buf.validate.FloatRules.greater_than
579
+ */
580
+ greaterThan: {
581
+ /**
582
+ * `gt` requires the field value to be greater than the specified value
583
+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
584
+ * `lte`, the range is reversed, and the field value must be outside the
585
+ * specified range. If the field value doesn't meet the required conditions,
586
+ * an error message is generated.
587
+ *
588
+ * ```proto
589
+ * message MyFloat {
590
+ * // value must be greater than 5.0 [float.gt]
591
+ * float value = 1 [(buf.validate.field).float.gt = 5.0];
592
+ *
593
+ * // value must be greater than 5 and less than 10.0 [float.gt_lt]
594
+ * float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];
595
+ *
596
+ * // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]
597
+ * float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];
598
+ * }
599
+ * ```
600
+ *
601
+ * @generated from field: float gt = 4;
602
+ */
603
+ value: number;
604
+ case: "gt";
605
+ } | {
606
+ /**
607
+ * `gte` requires the field value to be greater than or equal to the specified
608
+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
609
+ * or `lte`, the range is reversed, and the field value must be outside the
610
+ * specified range. If the field value doesn't meet the required conditions,
611
+ * an error message is generated.
612
+ *
613
+ * ```proto
614
+ * message MyFloat {
615
+ * // value must be greater than or equal to 5.0 [float.gte]
616
+ * float value = 1 [(buf.validate.field).float.gte = 5.0];
617
+ *
618
+ * // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]
619
+ * float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];
620
+ *
621
+ * // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]
622
+ * float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];
623
+ * }
624
+ * ```
625
+ *
626
+ * @generated from field: float gte = 5;
627
+ */
628
+ value: number;
629
+ case: "gte";
630
+ } | { case: undefined; value?: undefined };
631
+
632
+ /**
633
+ * `in` requires the field value to be equal to one of the specified values.
634
+ * If the field value isn't one of the specified values, an error message
635
+ * is generated.
636
+ *
637
+ * ```proto
638
+ * message MyFloat {
639
+ * // value must be in list [1.0, 2.0, 3.0]
640
+ * float value = 1 [(buf.validate.field).float = { in: [1.0, 2.0, 3.0] }];
641
+ * }
642
+ * ```
643
+ *
644
+ * @generated from field: repeated float in = 6;
645
+ */
646
+ in: number[];
647
+
648
+ /**
649
+ * `in` requires the field value to not be equal to any of the specified
650
+ * values. If the field value is one of the specified values, an error
651
+ * message is generated.
652
+ *
653
+ * ```proto
654
+ * message MyFloat {
655
+ * // value must not be in list [1.0, 2.0, 3.0]
656
+ * float value = 1 [(buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] }];
657
+ * }
658
+ * ```
659
+ *
660
+ * @generated from field: repeated float not_in = 7;
661
+ */
662
+ notIn: number[];
663
+
664
+ /**
665
+ * `finite` requires the field value to be finite. If the field value is
666
+ * infinite or NaN, an error message is generated.
667
+ *
668
+ * @generated from field: optional bool finite = 8;
669
+ */
670
+ finite: boolean;
671
+
672
+ /**
673
+ * `example` specifies values that the field may have. These values SHOULD
674
+ * conform to other rules. `example` values will not impact validation
675
+ * but may be used as helpful guidance on how to populate the given field.
676
+ *
677
+ * ```proto
678
+ * message MyFloat {
679
+ * float value = 1 [
680
+ * (buf.validate.field).float.example = 1.0,
681
+ * (buf.validate.field).float.example = inf
682
+ * ];
683
+ * }
684
+ * ```
685
+ *
686
+ * @generated from field: repeated float example = 9;
687
+ */
688
+ example: number[];
689
+ };
690
+
691
+ /**
692
+ * Describes the message buf.validate.FloatRules.
693
+ * Use `create(FloatRulesSchema)` to create a new message.
694
+ */
695
+ export const FloatRulesSchema: GenMessage<FloatRules> = /*@__PURE__*/
696
+ messageDesc(file_buf_validate_validate, 6);
697
+
698
+ /**
699
+ * DoubleRules describes the rules applied to `double` values. These
700
+ * rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type.
701
+ *
702
+ * @generated from message buf.validate.DoubleRules
703
+ */
704
+ export type DoubleRules = Message<"buf.validate.DoubleRules"> & {
705
+ /**
706
+ * `const` requires the field value to exactly match the specified value. If
707
+ * the field value doesn't match, an error message is generated.
708
+ *
709
+ * ```proto
710
+ * message MyDouble {
711
+ * // value must equal 42.0
712
+ * double value = 1 [(buf.validate.field).double.const = 42.0];
713
+ * }
714
+ * ```
715
+ *
716
+ * @generated from field: optional double const = 1;
717
+ */
718
+ const: number;
719
+
720
+ /**
721
+ * @generated from oneof buf.validate.DoubleRules.less_than
722
+ */
723
+ lessThan: {
724
+ /**
725
+ * `lt` requires the field value to be less than the specified value (field <
726
+ * value). If the field value is equal to or greater than the specified
727
+ * value, an error message is generated.
728
+ *
729
+ * ```proto
730
+ * message MyDouble {
731
+ * // value must be less than 10.0
732
+ * double value = 1 [(buf.validate.field).double.lt = 10.0];
733
+ * }
734
+ * ```
735
+ *
736
+ * @generated from field: double lt = 2;
737
+ */
738
+ value: number;
739
+ case: "lt";
740
+ } | {
741
+ /**
742
+ * `lte` requires the field value to be less than or equal to the specified value
743
+ * (field <= value). If the field value is greater than the specified value,
744
+ * an error message is generated.
745
+ *
746
+ * ```proto
747
+ * message MyDouble {
748
+ * // value must be less than or equal to 10.0
749
+ * double value = 1 [(buf.validate.field).double.lte = 10.0];
750
+ * }
751
+ * ```
752
+ *
753
+ * @generated from field: double lte = 3;
754
+ */
755
+ value: number;
756
+ case: "lte";
757
+ } | { case: undefined; value?: undefined };
758
+
759
+ /**
760
+ * @generated from oneof buf.validate.DoubleRules.greater_than
761
+ */
762
+ greaterThan: {
763
+ /**
764
+ * `gt` requires the field value to be greater than the specified value
765
+ * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,
766
+ * the range is reversed, and the field value must be outside the specified
767
+ * range. If the field value doesn't meet the required conditions, an error
768
+ * message is generated.
769
+ *
770
+ * ```proto
771
+ * message MyDouble {
772
+ * // value must be greater than 5.0 [double.gt]
773
+ * double value = 1 [(buf.validate.field).double.gt = 5.0];
774
+ *
775
+ * // value must be greater than 5 and less than 10.0 [double.gt_lt]
776
+ * double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];
777
+ *
778
+ * // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]
779
+ * double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];
780
+ * }
781
+ * ```
782
+ *
783
+ * @generated from field: double gt = 4;
784
+ */
785
+ value: number;
786
+ case: "gt";
787
+ } | {
788
+ /**
789
+ * `gte` requires the field value to be greater than or equal to the specified
790
+ * value (exclusive). If the value of `gte` is larger than a specified `lt` or
791
+ * `lte`, the range is reversed, and the field value must be outside the
792
+ * specified range. If the field value doesn't meet the required conditions,
793
+ * an error message is generated.
794
+ *
795
+ * ```proto
796
+ * message MyDouble {
797
+ * // value must be greater than or equal to 5.0 [double.gte]
798
+ * double value = 1 [(buf.validate.field).double.gte = 5.0];
799
+ *
800
+ * // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]
801
+ * double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];
802
+ *
803
+ * // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]
804
+ * double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];
805
+ * }
806
+ * ```
807
+ *
808
+ * @generated from field: double gte = 5;
809
+ */
810
+ value: number;
811
+ case: "gte";
812
+ } | { case: undefined; value?: undefined };
813
+
814
+ /**
815
+ * `in` requires the field value to be equal to one of the specified values.
816
+ * If the field value isn't one of the specified values, an error message is
817
+ * generated.
818
+ *
819
+ * ```proto
820
+ * message MyDouble {
821
+ * // value must be in list [1.0, 2.0, 3.0]
822
+ * double value = 1 [(buf.validate.field).double = { in: [1.0, 2.0, 3.0] }];
823
+ * }
824
+ * ```
825
+ *
826
+ * @generated from field: repeated double in = 6;
827
+ */
828
+ in: number[];
829
+
830
+ /**
831
+ * `not_in` requires the field value to not be equal to any of the specified
832
+ * values. If the field value is one of the specified values, an error
833
+ * message is generated.
834
+ *
835
+ * ```proto
836
+ * message MyDouble {
837
+ * // value must not be in list [1.0, 2.0, 3.0]
838
+ * double value = 1 [(buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] }];
839
+ * }
840
+ * ```
841
+ *
842
+ * @generated from field: repeated double not_in = 7;
843
+ */
844
+ notIn: number[];
845
+
846
+ /**
847
+ * `finite` requires the field value to be finite. If the field value is
848
+ * infinite or NaN, an error message is generated.
849
+ *
850
+ * @generated from field: optional bool finite = 8;
851
+ */
852
+ finite: boolean;
853
+
854
+ /**
855
+ * `example` specifies values that the field may have. These values SHOULD
856
+ * conform to other rules. `example` values will not impact validation
857
+ * but may be used as helpful guidance on how to populate the given field.
858
+ *
859
+ * ```proto
860
+ * message MyDouble {
861
+ * double value = 1 [
862
+ * (buf.validate.field).double.example = 1.0,
863
+ * (buf.validate.field).double.example = inf
864
+ * ];
865
+ * }
866
+ * ```
867
+ *
868
+ * @generated from field: repeated double example = 9;
869
+ */
870
+ example: number[];
871
+ };
872
+
873
+ /**
874
+ * Describes the message buf.validate.DoubleRules.
875
+ * Use `create(DoubleRulesSchema)` to create a new message.
876
+ */
877
+ export const DoubleRulesSchema: GenMessage<DoubleRules> = /*@__PURE__*/
878
+ messageDesc(file_buf_validate_validate, 7);
879
+
880
+ /**
881
+ * Int32Rules describes the rules applied to `int32` values. These
882
+ * rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type.
883
+ *
884
+ * @generated from message buf.validate.Int32Rules
885
+ */
886
+ export type Int32Rules = Message<"buf.validate.Int32Rules"> & {
887
+ /**
888
+ * `const` requires the field value to exactly match the specified value. If
889
+ * the field value doesn't match, an error message is generated.
890
+ *
891
+ * ```proto
892
+ * message MyInt32 {
893
+ * // value must equal 42
894
+ * int32 value = 1 [(buf.validate.field).int32.const = 42];
895
+ * }
896
+ * ```
897
+ *
898
+ * @generated from field: optional int32 const = 1;
899
+ */
900
+ const: number;
901
+
902
+ /**
903
+ * @generated from oneof buf.validate.Int32Rules.less_than
904
+ */
905
+ lessThan: {
906
+ /**
907
+ * `lt` requires the field value to be less than the specified value (field
908
+ * < value). If the field value is equal to or greater than the specified
909
+ * value, an error message is generated.
910
+ *
911
+ * ```proto
912
+ * message MyInt32 {
913
+ * // value must be less than 10
914
+ * int32 value = 1 [(buf.validate.field).int32.lt = 10];
915
+ * }
916
+ * ```
917
+ *
918
+ * @generated from field: int32 lt = 2;
919
+ */
920
+ value: number;
921
+ case: "lt";
922
+ } | {
923
+ /**
924
+ * `lte` requires the field value to be less than or equal to the specified
925
+ * value (field <= value). If the field value is greater than the specified
926
+ * value, an error message is generated.
927
+ *
928
+ * ```proto
929
+ * message MyInt32 {
930
+ * // value must be less than or equal to 10
931
+ * int32 value = 1 [(buf.validate.field).int32.lte = 10];
932
+ * }
933
+ * ```
934
+ *
935
+ * @generated from field: int32 lte = 3;
936
+ */
937
+ value: number;
938
+ case: "lte";
939
+ } | { case: undefined; value?: undefined };
940
+
941
+ /**
942
+ * @generated from oneof buf.validate.Int32Rules.greater_than
943
+ */
944
+ greaterThan: {
945
+ /**
946
+ * `gt` requires the field value to be greater than the specified value
947
+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
948
+ * `lte`, the range is reversed, and the field value must be outside the
949
+ * specified range. If the field value doesn't meet the required conditions,
950
+ * an error message is generated.
951
+ *
952
+ * ```proto
953
+ * message MyInt32 {
954
+ * // value must be greater than 5 [int32.gt]
955
+ * int32 value = 1 [(buf.validate.field).int32.gt = 5];
956
+ *
957
+ * // value must be greater than 5 and less than 10 [int32.gt_lt]
958
+ * int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];
959
+ *
960
+ * // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]
961
+ * int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];
962
+ * }
963
+ * ```
964
+ *
965
+ * @generated from field: int32 gt = 4;
966
+ */
967
+ value: number;
968
+ case: "gt";
969
+ } | {
970
+ /**
971
+ * `gte` requires the field value to be greater than or equal to the specified value
972
+ * (exclusive). If the value of `gte` is larger than a specified `lt` or
973
+ * `lte`, the range is reversed, and the field value must be outside the
974
+ * specified range. If the field value doesn't meet the required conditions,
975
+ * an error message is generated.
976
+ *
977
+ * ```proto
978
+ * message MyInt32 {
979
+ * // value must be greater than or equal to 5 [int32.gte]
980
+ * int32 value = 1 [(buf.validate.field).int32.gte = 5];
981
+ *
982
+ * // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]
983
+ * int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];
984
+ *
985
+ * // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]
986
+ * int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];
987
+ * }
988
+ * ```
989
+ *
990
+ * @generated from field: int32 gte = 5;
991
+ */
992
+ value: number;
993
+ case: "gte";
994
+ } | { case: undefined; value?: undefined };
995
+
996
+ /**
997
+ * `in` requires the field value to be equal to one of the specified values.
998
+ * If the field value isn't one of the specified values, an error message is
999
+ * generated.
1000
+ *
1001
+ * ```proto
1002
+ * message MyInt32 {
1003
+ * // value must be in list [1, 2, 3]
1004
+ * int32 value = 1 [(buf.validate.field).int32 = { in: [1, 2, 3] }];
1005
+ * }
1006
+ * ```
1007
+ *
1008
+ * @generated from field: repeated int32 in = 6;
1009
+ */
1010
+ in: number[];
1011
+
1012
+ /**
1013
+ * `not_in` requires the field value to not be equal to any of the specified
1014
+ * values. If the field value is one of the specified values, an error message
1015
+ * is generated.
1016
+ *
1017
+ * ```proto
1018
+ * message MyInt32 {
1019
+ * // value must not be in list [1, 2, 3]
1020
+ * int32 value = 1 [(buf.validate.field).int32 = { not_in: [1, 2, 3] }];
1021
+ * }
1022
+ * ```
1023
+ *
1024
+ * @generated from field: repeated int32 not_in = 7;
1025
+ */
1026
+ notIn: number[];
1027
+
1028
+ /**
1029
+ * `example` specifies values that the field may have. These values SHOULD
1030
+ * conform to other rules. `example` values will not impact validation
1031
+ * but may be used as helpful guidance on how to populate the given field.
1032
+ *
1033
+ * ```proto
1034
+ * message MyInt32 {
1035
+ * int32 value = 1 [
1036
+ * (buf.validate.field).int32.example = 1,
1037
+ * (buf.validate.field).int32.example = -10
1038
+ * ];
1039
+ * }
1040
+ * ```
1041
+ *
1042
+ * @generated from field: repeated int32 example = 8;
1043
+ */
1044
+ example: number[];
1045
+ };
1046
+
1047
+ /**
1048
+ * Describes the message buf.validate.Int32Rules.
1049
+ * Use `create(Int32RulesSchema)` to create a new message.
1050
+ */
1051
+ export const Int32RulesSchema: GenMessage<Int32Rules> = /*@__PURE__*/
1052
+ messageDesc(file_buf_validate_validate, 8);
1053
+
1054
+ /**
1055
+ * Int64Rules describes the rules applied to `int64` values. These
1056
+ * rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type.
1057
+ *
1058
+ * @generated from message buf.validate.Int64Rules
1059
+ */
1060
+ export type Int64Rules = Message<"buf.validate.Int64Rules"> & {
1061
+ /**
1062
+ * `const` requires the field value to exactly match the specified value. If
1063
+ * the field value doesn't match, an error message is generated.
1064
+ *
1065
+ * ```proto
1066
+ * message MyInt64 {
1067
+ * // value must equal 42
1068
+ * int64 value = 1 [(buf.validate.field).int64.const = 42];
1069
+ * }
1070
+ * ```
1071
+ *
1072
+ * @generated from field: optional int64 const = 1;
1073
+ */
1074
+ const: bigint;
1075
+
1076
+ /**
1077
+ * @generated from oneof buf.validate.Int64Rules.less_than
1078
+ */
1079
+ lessThan: {
1080
+ /**
1081
+ * `lt` requires the field value to be less than the specified value (field <
1082
+ * value). If the field value is equal to or greater than the specified value,
1083
+ * an error message is generated.
1084
+ *
1085
+ * ```proto
1086
+ * message MyInt64 {
1087
+ * // value must be less than 10
1088
+ * int64 value = 1 [(buf.validate.field).int64.lt = 10];
1089
+ * }
1090
+ * ```
1091
+ *
1092
+ * @generated from field: int64 lt = 2;
1093
+ */
1094
+ value: bigint;
1095
+ case: "lt";
1096
+ } | {
1097
+ /**
1098
+ * `lte` requires the field value to be less than or equal to the specified
1099
+ * value (field <= value). If the field value is greater than the specified
1100
+ * value, an error message is generated.
1101
+ *
1102
+ * ```proto
1103
+ * message MyInt64 {
1104
+ * // value must be less than or equal to 10
1105
+ * int64 value = 1 [(buf.validate.field).int64.lte = 10];
1106
+ * }
1107
+ * ```
1108
+ *
1109
+ * @generated from field: int64 lte = 3;
1110
+ */
1111
+ value: bigint;
1112
+ case: "lte";
1113
+ } | { case: undefined; value?: undefined };
1114
+
1115
+ /**
1116
+ * @generated from oneof buf.validate.Int64Rules.greater_than
1117
+ */
1118
+ greaterThan: {
1119
+ /**
1120
+ * `gt` requires the field value to be greater than the specified value
1121
+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
1122
+ * `lte`, the range is reversed, and the field value must be outside the
1123
+ * specified range. If the field value doesn't meet the required conditions,
1124
+ * an error message is generated.
1125
+ *
1126
+ * ```proto
1127
+ * message MyInt64 {
1128
+ * // value must be greater than 5 [int64.gt]
1129
+ * int64 value = 1 [(buf.validate.field).int64.gt = 5];
1130
+ *
1131
+ * // value must be greater than 5 and less than 10 [int64.gt_lt]
1132
+ * int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];
1133
+ *
1134
+ * // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]
1135
+ * int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];
1136
+ * }
1137
+ * ```
1138
+ *
1139
+ * @generated from field: int64 gt = 4;
1140
+ */
1141
+ value: bigint;
1142
+ case: "gt";
1143
+ } | {
1144
+ /**
1145
+ * `gte` requires the field value to be greater than or equal to the specified
1146
+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
1147
+ * or `lte`, the range is reversed, and the field value must be outside the
1148
+ * specified range. If the field value doesn't meet the required conditions,
1149
+ * an error message is generated.
1150
+ *
1151
+ * ```proto
1152
+ * message MyInt64 {
1153
+ * // value must be greater than or equal to 5 [int64.gte]
1154
+ * int64 value = 1 [(buf.validate.field).int64.gte = 5];
1155
+ *
1156
+ * // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]
1157
+ * int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];
1158
+ *
1159
+ * // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]
1160
+ * int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];
1161
+ * }
1162
+ * ```
1163
+ *
1164
+ * @generated from field: int64 gte = 5;
1165
+ */
1166
+ value: bigint;
1167
+ case: "gte";
1168
+ } | { case: undefined; value?: undefined };
1169
+
1170
+ /**
1171
+ * `in` requires the field value to be equal to one of the specified values.
1172
+ * If the field value isn't one of the specified values, an error message is
1173
+ * generated.
1174
+ *
1175
+ * ```proto
1176
+ * message MyInt64 {
1177
+ * // value must be in list [1, 2, 3]
1178
+ * int64 value = 1 [(buf.validate.field).int64 = { in: [1, 2, 3] }];
1179
+ * }
1180
+ * ```
1181
+ *
1182
+ * @generated from field: repeated int64 in = 6;
1183
+ */
1184
+ in: bigint[];
1185
+
1186
+ /**
1187
+ * `not_in` requires the field value to not be equal to any of the specified
1188
+ * values. If the field value is one of the specified values, an error
1189
+ * message is generated.
1190
+ *
1191
+ * ```proto
1192
+ * message MyInt64 {
1193
+ * // value must not be in list [1, 2, 3]
1194
+ * int64 value = 1 [(buf.validate.field).int64 = { not_in: [1, 2, 3] }];
1195
+ * }
1196
+ * ```
1197
+ *
1198
+ * @generated from field: repeated int64 not_in = 7;
1199
+ */
1200
+ notIn: bigint[];
1201
+
1202
+ /**
1203
+ * `example` specifies values that the field may have. These values SHOULD
1204
+ * conform to other rules. `example` values will not impact validation
1205
+ * but may be used as helpful guidance on how to populate the given field.
1206
+ *
1207
+ * ```proto
1208
+ * message MyInt64 {
1209
+ * int64 value = 1 [
1210
+ * (buf.validate.field).int64.example = 1,
1211
+ * (buf.validate.field).int64.example = -10
1212
+ * ];
1213
+ * }
1214
+ * ```
1215
+ *
1216
+ * @generated from field: repeated int64 example = 9;
1217
+ */
1218
+ example: bigint[];
1219
+ };
1220
+
1221
+ /**
1222
+ * Describes the message buf.validate.Int64Rules.
1223
+ * Use `create(Int64RulesSchema)` to create a new message.
1224
+ */
1225
+ export const Int64RulesSchema: GenMessage<Int64Rules> = /*@__PURE__*/
1226
+ messageDesc(file_buf_validate_validate, 9);
1227
+
1228
+ /**
1229
+ * UInt32Rules describes the rules applied to `uint32` values. These
1230
+ * rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type.
1231
+ *
1232
+ * @generated from message buf.validate.UInt32Rules
1233
+ */
1234
+ export type UInt32Rules = Message<"buf.validate.UInt32Rules"> & {
1235
+ /**
1236
+ * `const` requires the field value to exactly match the specified value. If
1237
+ * the field value doesn't match, an error message is generated.
1238
+ *
1239
+ * ```proto
1240
+ * message MyUInt32 {
1241
+ * // value must equal 42
1242
+ * uint32 value = 1 [(buf.validate.field).uint32.const = 42];
1243
+ * }
1244
+ * ```
1245
+ *
1246
+ * @generated from field: optional uint32 const = 1;
1247
+ */
1248
+ const: number;
1249
+
1250
+ /**
1251
+ * @generated from oneof buf.validate.UInt32Rules.less_than
1252
+ */
1253
+ lessThan: {
1254
+ /**
1255
+ * `lt` requires the field value to be less than the specified value (field <
1256
+ * value). If the field value is equal to or greater than the specified value,
1257
+ * an error message is generated.
1258
+ *
1259
+ * ```proto
1260
+ * message MyUInt32 {
1261
+ * // value must be less than 10
1262
+ * uint32 value = 1 [(buf.validate.field).uint32.lt = 10];
1263
+ * }
1264
+ * ```
1265
+ *
1266
+ * @generated from field: uint32 lt = 2;
1267
+ */
1268
+ value: number;
1269
+ case: "lt";
1270
+ } | {
1271
+ /**
1272
+ * `lte` requires the field value to be less than or equal to the specified
1273
+ * value (field <= value). If the field value is greater than the specified
1274
+ * value, an error message is generated.
1275
+ *
1276
+ * ```proto
1277
+ * message MyUInt32 {
1278
+ * // value must be less than or equal to 10
1279
+ * uint32 value = 1 [(buf.validate.field).uint32.lte = 10];
1280
+ * }
1281
+ * ```
1282
+ *
1283
+ * @generated from field: uint32 lte = 3;
1284
+ */
1285
+ value: number;
1286
+ case: "lte";
1287
+ } | { case: undefined; value?: undefined };
1288
+
1289
+ /**
1290
+ * @generated from oneof buf.validate.UInt32Rules.greater_than
1291
+ */
1292
+ greaterThan: {
1293
+ /**
1294
+ * `gt` requires the field value to be greater than the specified value
1295
+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
1296
+ * `lte`, the range is reversed, and the field value must be outside the
1297
+ * specified range. If the field value doesn't meet the required conditions,
1298
+ * an error message is generated.
1299
+ *
1300
+ * ```proto
1301
+ * message MyUInt32 {
1302
+ * // value must be greater than 5 [uint32.gt]
1303
+ * uint32 value = 1 [(buf.validate.field).uint32.gt = 5];
1304
+ *
1305
+ * // value must be greater than 5 and less than 10 [uint32.gt_lt]
1306
+ * uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];
1307
+ *
1308
+ * // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]
1309
+ * uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];
1310
+ * }
1311
+ * ```
1312
+ *
1313
+ * @generated from field: uint32 gt = 4;
1314
+ */
1315
+ value: number;
1316
+ case: "gt";
1317
+ } | {
1318
+ /**
1319
+ * `gte` requires the field value to be greater than or equal to the specified
1320
+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
1321
+ * or `lte`, the range is reversed, and the field value must be outside the
1322
+ * specified range. If the field value doesn't meet the required conditions,
1323
+ * an error message is generated.
1324
+ *
1325
+ * ```proto
1326
+ * message MyUInt32 {
1327
+ * // value must be greater than or equal to 5 [uint32.gte]
1328
+ * uint32 value = 1 [(buf.validate.field).uint32.gte = 5];
1329
+ *
1330
+ * // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]
1331
+ * uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];
1332
+ *
1333
+ * // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]
1334
+ * uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];
1335
+ * }
1336
+ * ```
1337
+ *
1338
+ * @generated from field: uint32 gte = 5;
1339
+ */
1340
+ value: number;
1341
+ case: "gte";
1342
+ } | { case: undefined; value?: undefined };
1343
+
1344
+ /**
1345
+ * `in` requires the field value to be equal to one of the specified values.
1346
+ * If the field value isn't one of the specified values, an error message is
1347
+ * generated.
1348
+ *
1349
+ * ```proto
1350
+ * message MyUInt32 {
1351
+ * // value must be in list [1, 2, 3]
1352
+ * uint32 value = 1 [(buf.validate.field).uint32 = { in: [1, 2, 3] }];
1353
+ * }
1354
+ * ```
1355
+ *
1356
+ * @generated from field: repeated uint32 in = 6;
1357
+ */
1358
+ in: number[];
1359
+
1360
+ /**
1361
+ * `not_in` requires the field value to not be equal to any of the specified
1362
+ * values. If the field value is one of the specified values, an error
1363
+ * message is generated.
1364
+ *
1365
+ * ```proto
1366
+ * message MyUInt32 {
1367
+ * // value must not be in list [1, 2, 3]
1368
+ * uint32 value = 1 [(buf.validate.field).uint32 = { not_in: [1, 2, 3] }];
1369
+ * }
1370
+ * ```
1371
+ *
1372
+ * @generated from field: repeated uint32 not_in = 7;
1373
+ */
1374
+ notIn: number[];
1375
+
1376
+ /**
1377
+ * `example` specifies values that the field may have. These values SHOULD
1378
+ * conform to other rules. `example` values will not impact validation
1379
+ * but may be used as helpful guidance on how to populate the given field.
1380
+ *
1381
+ * ```proto
1382
+ * message MyUInt32 {
1383
+ * uint32 value = 1 [
1384
+ * (buf.validate.field).uint32.example = 1,
1385
+ * (buf.validate.field).uint32.example = 10
1386
+ * ];
1387
+ * }
1388
+ * ```
1389
+ *
1390
+ * @generated from field: repeated uint32 example = 8;
1391
+ */
1392
+ example: number[];
1393
+ };
1394
+
1395
+ /**
1396
+ * Describes the message buf.validate.UInt32Rules.
1397
+ * Use `create(UInt32RulesSchema)` to create a new message.
1398
+ */
1399
+ export const UInt32RulesSchema: GenMessage<UInt32Rules> = /*@__PURE__*/
1400
+ messageDesc(file_buf_validate_validate, 10);
1401
+
1402
+ /**
1403
+ * UInt64Rules describes the rules applied to `uint64` values. These
1404
+ * rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type.
1405
+ *
1406
+ * @generated from message buf.validate.UInt64Rules
1407
+ */
1408
+ export type UInt64Rules = Message<"buf.validate.UInt64Rules"> & {
1409
+ /**
1410
+ * `const` requires the field value to exactly match the specified value. If
1411
+ * the field value doesn't match, an error message is generated.
1412
+ *
1413
+ * ```proto
1414
+ * message MyUInt64 {
1415
+ * // value must equal 42
1416
+ * uint64 value = 1 [(buf.validate.field).uint64.const = 42];
1417
+ * }
1418
+ * ```
1419
+ *
1420
+ * @generated from field: optional uint64 const = 1;
1421
+ */
1422
+ const: bigint;
1423
+
1424
+ /**
1425
+ * @generated from oneof buf.validate.UInt64Rules.less_than
1426
+ */
1427
+ lessThan: {
1428
+ /**
1429
+ * `lt` requires the field value to be less than the specified value (field <
1430
+ * value). If the field value is equal to or greater than the specified value,
1431
+ * an error message is generated.
1432
+ *
1433
+ * ```proto
1434
+ * message MyUInt64 {
1435
+ * // value must be less than 10
1436
+ * uint64 value = 1 [(buf.validate.field).uint64.lt = 10];
1437
+ * }
1438
+ * ```
1439
+ *
1440
+ * @generated from field: uint64 lt = 2;
1441
+ */
1442
+ value: bigint;
1443
+ case: "lt";
1444
+ } | {
1445
+ /**
1446
+ * `lte` requires the field value to be less than or equal to the specified
1447
+ * value (field <= value). If the field value is greater than the specified
1448
+ * value, an error message is generated.
1449
+ *
1450
+ * ```proto
1451
+ * message MyUInt64 {
1452
+ * // value must be less than or equal to 10
1453
+ * uint64 value = 1 [(buf.validate.field).uint64.lte = 10];
1454
+ * }
1455
+ * ```
1456
+ *
1457
+ * @generated from field: uint64 lte = 3;
1458
+ */
1459
+ value: bigint;
1460
+ case: "lte";
1461
+ } | { case: undefined; value?: undefined };
1462
+
1463
+ /**
1464
+ * @generated from oneof buf.validate.UInt64Rules.greater_than
1465
+ */
1466
+ greaterThan: {
1467
+ /**
1468
+ * `gt` requires the field value to be greater than the specified value
1469
+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
1470
+ * `lte`, the range is reversed, and the field value must be outside the
1471
+ * specified range. If the field value doesn't meet the required conditions,
1472
+ * an error message is generated.
1473
+ *
1474
+ * ```proto
1475
+ * message MyUInt64 {
1476
+ * // value must be greater than 5 [uint64.gt]
1477
+ * uint64 value = 1 [(buf.validate.field).uint64.gt = 5];
1478
+ *
1479
+ * // value must be greater than 5 and less than 10 [uint64.gt_lt]
1480
+ * uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];
1481
+ *
1482
+ * // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]
1483
+ * uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];
1484
+ * }
1485
+ * ```
1486
+ *
1487
+ * @generated from field: uint64 gt = 4;
1488
+ */
1489
+ value: bigint;
1490
+ case: "gt";
1491
+ } | {
1492
+ /**
1493
+ * `gte` requires the field value to be greater than or equal to the specified
1494
+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
1495
+ * or `lte`, the range is reversed, and the field value must be outside the
1496
+ * specified range. If the field value doesn't meet the required conditions,
1497
+ * an error message is generated.
1498
+ *
1499
+ * ```proto
1500
+ * message MyUInt64 {
1501
+ * // value must be greater than or equal to 5 [uint64.gte]
1502
+ * uint64 value = 1 [(buf.validate.field).uint64.gte = 5];
1503
+ *
1504
+ * // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]
1505
+ * uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];
1506
+ *
1507
+ * // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]
1508
+ * uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];
1509
+ * }
1510
+ * ```
1511
+ *
1512
+ * @generated from field: uint64 gte = 5;
1513
+ */
1514
+ value: bigint;
1515
+ case: "gte";
1516
+ } | { case: undefined; value?: undefined };
1517
+
1518
+ /**
1519
+ * `in` requires the field value to be equal to one of the specified values.
1520
+ * If the field value isn't one of the specified values, an error message is
1521
+ * generated.
1522
+ *
1523
+ * ```proto
1524
+ * message MyUInt64 {
1525
+ * // value must be in list [1, 2, 3]
1526
+ * uint64 value = 1 [(buf.validate.field).uint64 = { in: [1, 2, 3] }];
1527
+ * }
1528
+ * ```
1529
+ *
1530
+ * @generated from field: repeated uint64 in = 6;
1531
+ */
1532
+ in: bigint[];
1533
+
1534
+ /**
1535
+ * `not_in` requires the field value to not be equal to any of the specified
1536
+ * values. If the field value is one of the specified values, an error
1537
+ * message is generated.
1538
+ *
1539
+ * ```proto
1540
+ * message MyUInt64 {
1541
+ * // value must not be in list [1, 2, 3]
1542
+ * uint64 value = 1 [(buf.validate.field).uint64 = { not_in: [1, 2, 3] }];
1543
+ * }
1544
+ * ```
1545
+ *
1546
+ * @generated from field: repeated uint64 not_in = 7;
1547
+ */
1548
+ notIn: bigint[];
1549
+
1550
+ /**
1551
+ * `example` specifies values that the field may have. These values SHOULD
1552
+ * conform to other rules. `example` values will not impact validation
1553
+ * but may be used as helpful guidance on how to populate the given field.
1554
+ *
1555
+ * ```proto
1556
+ * message MyUInt64 {
1557
+ * uint64 value = 1 [
1558
+ * (buf.validate.field).uint64.example = 1,
1559
+ * (buf.validate.field).uint64.example = -10
1560
+ * ];
1561
+ * }
1562
+ * ```
1563
+ *
1564
+ * @generated from field: repeated uint64 example = 8;
1565
+ */
1566
+ example: bigint[];
1567
+ };
1568
+
1569
+ /**
1570
+ * Describes the message buf.validate.UInt64Rules.
1571
+ * Use `create(UInt64RulesSchema)` to create a new message.
1572
+ */
1573
+ export const UInt64RulesSchema: GenMessage<UInt64Rules> = /*@__PURE__*/
1574
+ messageDesc(file_buf_validate_validate, 11);
1575
+
1576
+ /**
1577
+ * SInt32Rules describes the rules applied to `sint32` values.
1578
+ *
1579
+ * @generated from message buf.validate.SInt32Rules
1580
+ */
1581
+ export type SInt32Rules = Message<"buf.validate.SInt32Rules"> & {
1582
+ /**
1583
+ * `const` requires the field value to exactly match the specified value. If
1584
+ * the field value doesn't match, an error message is generated.
1585
+ *
1586
+ * ```proto
1587
+ * message MySInt32 {
1588
+ * // value must equal 42
1589
+ * sint32 value = 1 [(buf.validate.field).sint32.const = 42];
1590
+ * }
1591
+ * ```
1592
+ *
1593
+ * @generated from field: optional sint32 const = 1;
1594
+ */
1595
+ const: number;
1596
+
1597
+ /**
1598
+ * @generated from oneof buf.validate.SInt32Rules.less_than
1599
+ */
1600
+ lessThan: {
1601
+ /**
1602
+ * `lt` requires the field value to be less than the specified value (field
1603
+ * < value). If the field value is equal to or greater than the specified
1604
+ * value, an error message is generated.
1605
+ *
1606
+ * ```proto
1607
+ * message MySInt32 {
1608
+ * // value must be less than 10
1609
+ * sint32 value = 1 [(buf.validate.field).sint32.lt = 10];
1610
+ * }
1611
+ * ```
1612
+ *
1613
+ * @generated from field: sint32 lt = 2;
1614
+ */
1615
+ value: number;
1616
+ case: "lt";
1617
+ } | {
1618
+ /**
1619
+ * `lte` requires the field value to be less than or equal to the specified
1620
+ * value (field <= value). If the field value is greater than the specified
1621
+ * value, an error message is generated.
1622
+ *
1623
+ * ```proto
1624
+ * message MySInt32 {
1625
+ * // value must be less than or equal to 10
1626
+ * sint32 value = 1 [(buf.validate.field).sint32.lte = 10];
1627
+ * }
1628
+ * ```
1629
+ *
1630
+ * @generated from field: sint32 lte = 3;
1631
+ */
1632
+ value: number;
1633
+ case: "lte";
1634
+ } | { case: undefined; value?: undefined };
1635
+
1636
+ /**
1637
+ * @generated from oneof buf.validate.SInt32Rules.greater_than
1638
+ */
1639
+ greaterThan: {
1640
+ /**
1641
+ * `gt` requires the field value to be greater than the specified value
1642
+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
1643
+ * `lte`, the range is reversed, and the field value must be outside the
1644
+ * specified range. If the field value doesn't meet the required conditions,
1645
+ * an error message is generated.
1646
+ *
1647
+ * ```proto
1648
+ * message MySInt32 {
1649
+ * // value must be greater than 5 [sint32.gt]
1650
+ * sint32 value = 1 [(buf.validate.field).sint32.gt = 5];
1651
+ *
1652
+ * // value must be greater than 5 and less than 10 [sint32.gt_lt]
1653
+ * sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];
1654
+ *
1655
+ * // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]
1656
+ * sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];
1657
+ * }
1658
+ * ```
1659
+ *
1660
+ * @generated from field: sint32 gt = 4;
1661
+ */
1662
+ value: number;
1663
+ case: "gt";
1664
+ } | {
1665
+ /**
1666
+ * `gte` requires the field value to be greater than or equal to the specified
1667
+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
1668
+ * or `lte`, the range is reversed, and the field value must be outside the
1669
+ * specified range. If the field value doesn't meet the required conditions,
1670
+ * an error message is generated.
1671
+ *
1672
+ * ```proto
1673
+ * message MySInt32 {
1674
+ * // value must be greater than or equal to 5 [sint32.gte]
1675
+ * sint32 value = 1 [(buf.validate.field).sint32.gte = 5];
1676
+ *
1677
+ * // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]
1678
+ * sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];
1679
+ *
1680
+ * // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]
1681
+ * sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];
1682
+ * }
1683
+ * ```
1684
+ *
1685
+ * @generated from field: sint32 gte = 5;
1686
+ */
1687
+ value: number;
1688
+ case: "gte";
1689
+ } | { case: undefined; value?: undefined };
1690
+
1691
+ /**
1692
+ * `in` requires the field value to be equal to one of the specified values.
1693
+ * If the field value isn't one of the specified values, an error message is
1694
+ * generated.
1695
+ *
1696
+ * ```proto
1697
+ * message MySInt32 {
1698
+ * // value must be in list [1, 2, 3]
1699
+ * sint32 value = 1 [(buf.validate.field).sint32 = { in: [1, 2, 3] }];
1700
+ * }
1701
+ * ```
1702
+ *
1703
+ * @generated from field: repeated sint32 in = 6;
1704
+ */
1705
+ in: number[];
1706
+
1707
+ /**
1708
+ * `not_in` requires the field value to not be equal to any of the specified
1709
+ * values. If the field value is one of the specified values, an error
1710
+ * message is generated.
1711
+ *
1712
+ * ```proto
1713
+ * message MySInt32 {
1714
+ * // value must not be in list [1, 2, 3]
1715
+ * sint32 value = 1 [(buf.validate.field).sint32 = { not_in: [1, 2, 3] }];
1716
+ * }
1717
+ * ```
1718
+ *
1719
+ * @generated from field: repeated sint32 not_in = 7;
1720
+ */
1721
+ notIn: number[];
1722
+
1723
+ /**
1724
+ * `example` specifies values that the field may have. These values SHOULD
1725
+ * conform to other rules. `example` values will not impact validation
1726
+ * but may be used as helpful guidance on how to populate the given field.
1727
+ *
1728
+ * ```proto
1729
+ * message MySInt32 {
1730
+ * sint32 value = 1 [
1731
+ * (buf.validate.field).sint32.example = 1,
1732
+ * (buf.validate.field).sint32.example = -10
1733
+ * ];
1734
+ * }
1735
+ * ```
1736
+ *
1737
+ * @generated from field: repeated sint32 example = 8;
1738
+ */
1739
+ example: number[];
1740
+ };
1741
+
1742
+ /**
1743
+ * Describes the message buf.validate.SInt32Rules.
1744
+ * Use `create(SInt32RulesSchema)` to create a new message.
1745
+ */
1746
+ export const SInt32RulesSchema: GenMessage<SInt32Rules> = /*@__PURE__*/
1747
+ messageDesc(file_buf_validate_validate, 12);
1748
+
1749
+ /**
1750
+ * SInt64Rules describes the rules applied to `sint64` values.
1751
+ *
1752
+ * @generated from message buf.validate.SInt64Rules
1753
+ */
1754
+ export type SInt64Rules = Message<"buf.validate.SInt64Rules"> & {
1755
+ /**
1756
+ * `const` requires the field value to exactly match the specified value. If
1757
+ * the field value doesn't match, an error message is generated.
1758
+ *
1759
+ * ```proto
1760
+ * message MySInt64 {
1761
+ * // value must equal 42
1762
+ * sint64 value = 1 [(buf.validate.field).sint64.const = 42];
1763
+ * }
1764
+ * ```
1765
+ *
1766
+ * @generated from field: optional sint64 const = 1;
1767
+ */
1768
+ const: bigint;
1769
+
1770
+ /**
1771
+ * @generated from oneof buf.validate.SInt64Rules.less_than
1772
+ */
1773
+ lessThan: {
1774
+ /**
1775
+ * `lt` requires the field value to be less than the specified value (field
1776
+ * < value). If the field value is equal to or greater than the specified
1777
+ * value, an error message is generated.
1778
+ *
1779
+ * ```proto
1780
+ * message MySInt64 {
1781
+ * // value must be less than 10
1782
+ * sint64 value = 1 [(buf.validate.field).sint64.lt = 10];
1783
+ * }
1784
+ * ```
1785
+ *
1786
+ * @generated from field: sint64 lt = 2;
1787
+ */
1788
+ value: bigint;
1789
+ case: "lt";
1790
+ } | {
1791
+ /**
1792
+ * `lte` requires the field value to be less than or equal to the specified
1793
+ * value (field <= value). If the field value is greater than the specified
1794
+ * value, an error message is generated.
1795
+ *
1796
+ * ```proto
1797
+ * message MySInt64 {
1798
+ * // value must be less than or equal to 10
1799
+ * sint64 value = 1 [(buf.validate.field).sint64.lte = 10];
1800
+ * }
1801
+ * ```
1802
+ *
1803
+ * @generated from field: sint64 lte = 3;
1804
+ */
1805
+ value: bigint;
1806
+ case: "lte";
1807
+ } | { case: undefined; value?: undefined };
1808
+
1809
+ /**
1810
+ * @generated from oneof buf.validate.SInt64Rules.greater_than
1811
+ */
1812
+ greaterThan: {
1813
+ /**
1814
+ * `gt` requires the field value to be greater than the specified value
1815
+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
1816
+ * `lte`, the range is reversed, and the field value must be outside the
1817
+ * specified range. If the field value doesn't meet the required conditions,
1818
+ * an error message is generated.
1819
+ *
1820
+ * ```proto
1821
+ * message MySInt64 {
1822
+ * // value must be greater than 5 [sint64.gt]
1823
+ * sint64 value = 1 [(buf.validate.field).sint64.gt = 5];
1824
+ *
1825
+ * // value must be greater than 5 and less than 10 [sint64.gt_lt]
1826
+ * sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];
1827
+ *
1828
+ * // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]
1829
+ * sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];
1830
+ * }
1831
+ * ```
1832
+ *
1833
+ * @generated from field: sint64 gt = 4;
1834
+ */
1835
+ value: bigint;
1836
+ case: "gt";
1837
+ } | {
1838
+ /**
1839
+ * `gte` requires the field value to be greater than or equal to the specified
1840
+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
1841
+ * or `lte`, the range is reversed, and the field value must be outside the
1842
+ * specified range. If the field value doesn't meet the required conditions,
1843
+ * an error message is generated.
1844
+ *
1845
+ * ```proto
1846
+ * message MySInt64 {
1847
+ * // value must be greater than or equal to 5 [sint64.gte]
1848
+ * sint64 value = 1 [(buf.validate.field).sint64.gte = 5];
1849
+ *
1850
+ * // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]
1851
+ * sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];
1852
+ *
1853
+ * // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]
1854
+ * sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];
1855
+ * }
1856
+ * ```
1857
+ *
1858
+ * @generated from field: sint64 gte = 5;
1859
+ */
1860
+ value: bigint;
1861
+ case: "gte";
1862
+ } | { case: undefined; value?: undefined };
1863
+
1864
+ /**
1865
+ * `in` requires the field value to be equal to one of the specified values.
1866
+ * If the field value isn't one of the specified values, an error message
1867
+ * is generated.
1868
+ *
1869
+ * ```proto
1870
+ * message MySInt64 {
1871
+ * // value must be in list [1, 2, 3]
1872
+ * sint64 value = 1 [(buf.validate.field).sint64 = { in: [1, 2, 3] }];
1873
+ * }
1874
+ * ```
1875
+ *
1876
+ * @generated from field: repeated sint64 in = 6;
1877
+ */
1878
+ in: bigint[];
1879
+
1880
+ /**
1881
+ * `not_in` requires the field value to not be equal to any of the specified
1882
+ * values. If the field value is one of the specified values, an error
1883
+ * message is generated.
1884
+ *
1885
+ * ```proto
1886
+ * message MySInt64 {
1887
+ * // value must not be in list [1, 2, 3]
1888
+ * sint64 value = 1 [(buf.validate.field).sint64 = { not_in: [1, 2, 3] }];
1889
+ * }
1890
+ * ```
1891
+ *
1892
+ * @generated from field: repeated sint64 not_in = 7;
1893
+ */
1894
+ notIn: bigint[];
1895
+
1896
+ /**
1897
+ * `example` specifies values that the field may have. These values SHOULD
1898
+ * conform to other rules. `example` values will not impact validation
1899
+ * but may be used as helpful guidance on how to populate the given field.
1900
+ *
1901
+ * ```proto
1902
+ * message MySInt64 {
1903
+ * sint64 value = 1 [
1904
+ * (buf.validate.field).sint64.example = 1,
1905
+ * (buf.validate.field).sint64.example = -10
1906
+ * ];
1907
+ * }
1908
+ * ```
1909
+ *
1910
+ * @generated from field: repeated sint64 example = 8;
1911
+ */
1912
+ example: bigint[];
1913
+ };
1914
+
1915
+ /**
1916
+ * Describes the message buf.validate.SInt64Rules.
1917
+ * Use `create(SInt64RulesSchema)` to create a new message.
1918
+ */
1919
+ export const SInt64RulesSchema: GenMessage<SInt64Rules> = /*@__PURE__*/
1920
+ messageDesc(file_buf_validate_validate, 13);
1921
+
1922
+ /**
1923
+ * Fixed32Rules describes the rules applied to `fixed32` values.
1924
+ *
1925
+ * @generated from message buf.validate.Fixed32Rules
1926
+ */
1927
+ export type Fixed32Rules = Message<"buf.validate.Fixed32Rules"> & {
1928
+ /**
1929
+ * `const` requires the field value to exactly match the specified value.
1930
+ * If the field value doesn't match, an error message is generated.
1931
+ *
1932
+ * ```proto
1933
+ * message MyFixed32 {
1934
+ * // value must equal 42
1935
+ * fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];
1936
+ * }
1937
+ * ```
1938
+ *
1939
+ * @generated from field: optional fixed32 const = 1;
1940
+ */
1941
+ const: number;
1942
+
1943
+ /**
1944
+ * @generated from oneof buf.validate.Fixed32Rules.less_than
1945
+ */
1946
+ lessThan: {
1947
+ /**
1948
+ * `lt` requires the field value to be less than the specified value (field <
1949
+ * value). If the field value is equal to or greater than the specified value,
1950
+ * an error message is generated.
1951
+ *
1952
+ * ```proto
1953
+ * message MyFixed32 {
1954
+ * // value must be less than 10
1955
+ * fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];
1956
+ * }
1957
+ * ```
1958
+ *
1959
+ * @generated from field: fixed32 lt = 2;
1960
+ */
1961
+ value: number;
1962
+ case: "lt";
1963
+ } | {
1964
+ /**
1965
+ * `lte` requires the field value to be less than or equal to the specified
1966
+ * value (field <= value). If the field value is greater than the specified
1967
+ * value, an error message is generated.
1968
+ *
1969
+ * ```proto
1970
+ * message MyFixed32 {
1971
+ * // value must be less than or equal to 10
1972
+ * fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];
1973
+ * }
1974
+ * ```
1975
+ *
1976
+ * @generated from field: fixed32 lte = 3;
1977
+ */
1978
+ value: number;
1979
+ case: "lte";
1980
+ } | { case: undefined; value?: undefined };
1981
+
1982
+ /**
1983
+ * @generated from oneof buf.validate.Fixed32Rules.greater_than
1984
+ */
1985
+ greaterThan: {
1986
+ /**
1987
+ * `gt` requires the field value to be greater than the specified value
1988
+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
1989
+ * `lte`, the range is reversed, and the field value must be outside the
1990
+ * specified range. If the field value doesn't meet the required conditions,
1991
+ * an error message is generated.
1992
+ *
1993
+ * ```proto
1994
+ * message MyFixed32 {
1995
+ * // value must be greater than 5 [fixed32.gt]
1996
+ * fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];
1997
+ *
1998
+ * // value must be greater than 5 and less than 10 [fixed32.gt_lt]
1999
+ * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];
2000
+ *
2001
+ * // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]
2002
+ * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];
2003
+ * }
2004
+ * ```
2005
+ *
2006
+ * @generated from field: fixed32 gt = 4;
2007
+ */
2008
+ value: number;
2009
+ case: "gt";
2010
+ } | {
2011
+ /**
2012
+ * `gte` requires the field value to be greater than or equal to the specified
2013
+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
2014
+ * or `lte`, the range is reversed, and the field value must be outside the
2015
+ * specified range. If the field value doesn't meet the required conditions,
2016
+ * an error message is generated.
2017
+ *
2018
+ * ```proto
2019
+ * message MyFixed32 {
2020
+ * // value must be greater than or equal to 5 [fixed32.gte]
2021
+ * fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];
2022
+ *
2023
+ * // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]
2024
+ * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];
2025
+ *
2026
+ * // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]
2027
+ * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];
2028
+ * }
2029
+ * ```
2030
+ *
2031
+ * @generated from field: fixed32 gte = 5;
2032
+ */
2033
+ value: number;
2034
+ case: "gte";
2035
+ } | { case: undefined; value?: undefined };
2036
+
2037
+ /**
2038
+ * `in` requires the field value to be equal to one of the specified values.
2039
+ * If the field value isn't one of the specified values, an error message
2040
+ * is generated.
2041
+ *
2042
+ * ```proto
2043
+ * message MyFixed32 {
2044
+ * // value must be in list [1, 2, 3]
2045
+ * fixed32 value = 1 [(buf.validate.field).fixed32 = { in: [1, 2, 3] }];
2046
+ * }
2047
+ * ```
2048
+ *
2049
+ * @generated from field: repeated fixed32 in = 6;
2050
+ */
2051
+ in: number[];
2052
+
2053
+ /**
2054
+ * `not_in` requires the field value to not be equal to any of the specified
2055
+ * values. If the field value is one of the specified values, an error
2056
+ * message is generated.
2057
+ *
2058
+ * ```proto
2059
+ * message MyFixed32 {
2060
+ * // value must not be in list [1, 2, 3]
2061
+ * fixed32 value = 1 [(buf.validate.field).fixed32 = { not_in: [1, 2, 3] }];
2062
+ * }
2063
+ * ```
2064
+ *
2065
+ * @generated from field: repeated fixed32 not_in = 7;
2066
+ */
2067
+ notIn: number[];
2068
+
2069
+ /**
2070
+ * `example` specifies values that the field may have. These values SHOULD
2071
+ * conform to other rules. `example` values will not impact validation
2072
+ * but may be used as helpful guidance on how to populate the given field.
2073
+ *
2074
+ * ```proto
2075
+ * message MyFixed32 {
2076
+ * fixed32 value = 1 [
2077
+ * (buf.validate.field).fixed32.example = 1,
2078
+ * (buf.validate.field).fixed32.example = 2
2079
+ * ];
2080
+ * }
2081
+ * ```
2082
+ *
2083
+ * @generated from field: repeated fixed32 example = 8;
2084
+ */
2085
+ example: number[];
2086
+ };
2087
+
2088
+ /**
2089
+ * Describes the message buf.validate.Fixed32Rules.
2090
+ * Use `create(Fixed32RulesSchema)` to create a new message.
2091
+ */
2092
+ export const Fixed32RulesSchema: GenMessage<Fixed32Rules> = /*@__PURE__*/
2093
+ messageDesc(file_buf_validate_validate, 14);
2094
+
2095
+ /**
2096
+ * Fixed64Rules describes the rules applied to `fixed64` values.
2097
+ *
2098
+ * @generated from message buf.validate.Fixed64Rules
2099
+ */
2100
+ export type Fixed64Rules = Message<"buf.validate.Fixed64Rules"> & {
2101
+ /**
2102
+ * `const` requires the field value to exactly match the specified value. If
2103
+ * the field value doesn't match, an error message is generated.
2104
+ *
2105
+ * ```proto
2106
+ * message MyFixed64 {
2107
+ * // value must equal 42
2108
+ * fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];
2109
+ * }
2110
+ * ```
2111
+ *
2112
+ * @generated from field: optional fixed64 const = 1;
2113
+ */
2114
+ const: bigint;
2115
+
2116
+ /**
2117
+ * @generated from oneof buf.validate.Fixed64Rules.less_than
2118
+ */
2119
+ lessThan: {
2120
+ /**
2121
+ * `lt` requires the field value to be less than the specified value (field <
2122
+ * value). If the field value is equal to or greater than the specified value,
2123
+ * an error message is generated.
2124
+ *
2125
+ * ```proto
2126
+ * message MyFixed64 {
2127
+ * // value must be less than 10
2128
+ * fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];
2129
+ * }
2130
+ * ```
2131
+ *
2132
+ * @generated from field: fixed64 lt = 2;
2133
+ */
2134
+ value: bigint;
2135
+ case: "lt";
2136
+ } | {
2137
+ /**
2138
+ * `lte` requires the field value to be less than or equal to the specified
2139
+ * value (field <= value). If the field value is greater than the specified
2140
+ * value, an error message is generated.
2141
+ *
2142
+ * ```proto
2143
+ * message MyFixed64 {
2144
+ * // value must be less than or equal to 10
2145
+ * fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];
2146
+ * }
2147
+ * ```
2148
+ *
2149
+ * @generated from field: fixed64 lte = 3;
2150
+ */
2151
+ value: bigint;
2152
+ case: "lte";
2153
+ } | { case: undefined; value?: undefined };
2154
+
2155
+ /**
2156
+ * @generated from oneof buf.validate.Fixed64Rules.greater_than
2157
+ */
2158
+ greaterThan: {
2159
+ /**
2160
+ * `gt` requires the field value to be greater than the specified value
2161
+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
2162
+ * `lte`, the range is reversed, and the field value must be outside the
2163
+ * specified range. If the field value doesn't meet the required conditions,
2164
+ * an error message is generated.
2165
+ *
2166
+ * ```proto
2167
+ * message MyFixed64 {
2168
+ * // value must be greater than 5 [fixed64.gt]
2169
+ * fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];
2170
+ *
2171
+ * // value must be greater than 5 and less than 10 [fixed64.gt_lt]
2172
+ * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];
2173
+ *
2174
+ * // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]
2175
+ * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];
2176
+ * }
2177
+ * ```
2178
+ *
2179
+ * @generated from field: fixed64 gt = 4;
2180
+ */
2181
+ value: bigint;
2182
+ case: "gt";
2183
+ } | {
2184
+ /**
2185
+ * `gte` requires the field value to be greater than or equal to the specified
2186
+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
2187
+ * or `lte`, the range is reversed, and the field value must be outside the
2188
+ * specified range. If the field value doesn't meet the required conditions,
2189
+ * an error message is generated.
2190
+ *
2191
+ * ```proto
2192
+ * message MyFixed64 {
2193
+ * // value must be greater than or equal to 5 [fixed64.gte]
2194
+ * fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];
2195
+ *
2196
+ * // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]
2197
+ * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];
2198
+ *
2199
+ * // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]
2200
+ * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];
2201
+ * }
2202
+ * ```
2203
+ *
2204
+ * @generated from field: fixed64 gte = 5;
2205
+ */
2206
+ value: bigint;
2207
+ case: "gte";
2208
+ } | { case: undefined; value?: undefined };
2209
+
2210
+ /**
2211
+ * `in` requires the field value to be equal to one of the specified values.
2212
+ * If the field value isn't one of the specified values, an error message is
2213
+ * generated.
2214
+ *
2215
+ * ```proto
2216
+ * message MyFixed64 {
2217
+ * // value must be in list [1, 2, 3]
2218
+ * fixed64 value = 1 [(buf.validate.field).fixed64 = { in: [1, 2, 3] }];
2219
+ * }
2220
+ * ```
2221
+ *
2222
+ * @generated from field: repeated fixed64 in = 6;
2223
+ */
2224
+ in: bigint[];
2225
+
2226
+ /**
2227
+ * `not_in` requires the field value to not be equal to any of the specified
2228
+ * values. If the field value is one of the specified values, an error
2229
+ * message is generated.
2230
+ *
2231
+ * ```proto
2232
+ * message MyFixed64 {
2233
+ * // value must not be in list [1, 2, 3]
2234
+ * fixed64 value = 1 [(buf.validate.field).fixed64 = { not_in: [1, 2, 3] }];
2235
+ * }
2236
+ * ```
2237
+ *
2238
+ * @generated from field: repeated fixed64 not_in = 7;
2239
+ */
2240
+ notIn: bigint[];
2241
+
2242
+ /**
2243
+ * `example` specifies values that the field may have. These values SHOULD
2244
+ * conform to other rules. `example` values will not impact validation
2245
+ * but may be used as helpful guidance on how to populate the given field.
2246
+ *
2247
+ * ```proto
2248
+ * message MyFixed64 {
2249
+ * fixed64 value = 1 [
2250
+ * (buf.validate.field).fixed64.example = 1,
2251
+ * (buf.validate.field).fixed64.example = 2
2252
+ * ];
2253
+ * }
2254
+ * ```
2255
+ *
2256
+ * @generated from field: repeated fixed64 example = 8;
2257
+ */
2258
+ example: bigint[];
2259
+ };
2260
+
2261
+ /**
2262
+ * Describes the message buf.validate.Fixed64Rules.
2263
+ * Use `create(Fixed64RulesSchema)` to create a new message.
2264
+ */
2265
+ export const Fixed64RulesSchema: GenMessage<Fixed64Rules> = /*@__PURE__*/
2266
+ messageDesc(file_buf_validate_validate, 15);
2267
+
2268
+ /**
2269
+ * SFixed32Rules describes the rules applied to `fixed32` values.
2270
+ *
2271
+ * @generated from message buf.validate.SFixed32Rules
2272
+ */
2273
+ export type SFixed32Rules = Message<"buf.validate.SFixed32Rules"> & {
2274
+ /**
2275
+ * `const` requires the field value to exactly match the specified value. If
2276
+ * the field value doesn't match, an error message is generated.
2277
+ *
2278
+ * ```proto
2279
+ * message MySFixed32 {
2280
+ * // value must equal 42
2281
+ * sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];
2282
+ * }
2283
+ * ```
2284
+ *
2285
+ * @generated from field: optional sfixed32 const = 1;
2286
+ */
2287
+ const: number;
2288
+
2289
+ /**
2290
+ * @generated from oneof buf.validate.SFixed32Rules.less_than
2291
+ */
2292
+ lessThan: {
2293
+ /**
2294
+ * `lt` requires the field value to be less than the specified value (field <
2295
+ * value). If the field value is equal to or greater than the specified value,
2296
+ * an error message is generated.
2297
+ *
2298
+ * ```proto
2299
+ * message MySFixed32 {
2300
+ * // value must be less than 10
2301
+ * sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];
2302
+ * }
2303
+ * ```
2304
+ *
2305
+ * @generated from field: sfixed32 lt = 2;
2306
+ */
2307
+ value: number;
2308
+ case: "lt";
2309
+ } | {
2310
+ /**
2311
+ * `lte` requires the field value to be less than or equal to the specified
2312
+ * value (field <= value). If the field value is greater than the specified
2313
+ * value, an error message is generated.
2314
+ *
2315
+ * ```proto
2316
+ * message MySFixed32 {
2317
+ * // value must be less than or equal to 10
2318
+ * sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];
2319
+ * }
2320
+ * ```
2321
+ *
2322
+ * @generated from field: sfixed32 lte = 3;
2323
+ */
2324
+ value: number;
2325
+ case: "lte";
2326
+ } | { case: undefined; value?: undefined };
2327
+
2328
+ /**
2329
+ * @generated from oneof buf.validate.SFixed32Rules.greater_than
2330
+ */
2331
+ greaterThan: {
2332
+ /**
2333
+ * `gt` requires the field value to be greater than the specified value
2334
+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
2335
+ * `lte`, the range is reversed, and the field value must be outside the
2336
+ * specified range. If the field value doesn't meet the required conditions,
2337
+ * an error message is generated.
2338
+ *
2339
+ * ```proto
2340
+ * message MySFixed32 {
2341
+ * // value must be greater than 5 [sfixed32.gt]
2342
+ * sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];
2343
+ *
2344
+ * // value must be greater than 5 and less than 10 [sfixed32.gt_lt]
2345
+ * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];
2346
+ *
2347
+ * // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]
2348
+ * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];
2349
+ * }
2350
+ * ```
2351
+ *
2352
+ * @generated from field: sfixed32 gt = 4;
2353
+ */
2354
+ value: number;
2355
+ case: "gt";
2356
+ } | {
2357
+ /**
2358
+ * `gte` requires the field value to be greater than or equal to the specified
2359
+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
2360
+ * or `lte`, the range is reversed, and the field value must be outside the
2361
+ * specified range. If the field value doesn't meet the required conditions,
2362
+ * an error message is generated.
2363
+ *
2364
+ * ```proto
2365
+ * message MySFixed32 {
2366
+ * // value must be greater than or equal to 5 [sfixed32.gte]
2367
+ * sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];
2368
+ *
2369
+ * // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]
2370
+ * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];
2371
+ *
2372
+ * // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]
2373
+ * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];
2374
+ * }
2375
+ * ```
2376
+ *
2377
+ * @generated from field: sfixed32 gte = 5;
2378
+ */
2379
+ value: number;
2380
+ case: "gte";
2381
+ } | { case: undefined; value?: undefined };
2382
+
2383
+ /**
2384
+ * `in` requires the field value to be equal to one of the specified values.
2385
+ * If the field value isn't one of the specified values, an error message is
2386
+ * generated.
2387
+ *
2388
+ * ```proto
2389
+ * message MySFixed32 {
2390
+ * // value must be in list [1, 2, 3]
2391
+ * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { in: [1, 2, 3] }];
2392
+ * }
2393
+ * ```
2394
+ *
2395
+ * @generated from field: repeated sfixed32 in = 6;
2396
+ */
2397
+ in: number[];
2398
+
2399
+ /**
2400
+ * `not_in` requires the field value to not be equal to any of the specified
2401
+ * values. If the field value is one of the specified values, an error
2402
+ * message is generated.
2403
+ *
2404
+ * ```proto
2405
+ * message MySFixed32 {
2406
+ * // value must not be in list [1, 2, 3]
2407
+ * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { not_in: [1, 2, 3] }];
2408
+ * }
2409
+ * ```
2410
+ *
2411
+ * @generated from field: repeated sfixed32 not_in = 7;
2412
+ */
2413
+ notIn: number[];
2414
+
2415
+ /**
2416
+ * `example` specifies values that the field may have. These values SHOULD
2417
+ * conform to other rules. `example` values will not impact validation
2418
+ * but may be used as helpful guidance on how to populate the given field.
2419
+ *
2420
+ * ```proto
2421
+ * message MySFixed32 {
2422
+ * sfixed32 value = 1 [
2423
+ * (buf.validate.field).sfixed32.example = 1,
2424
+ * (buf.validate.field).sfixed32.example = 2
2425
+ * ];
2426
+ * }
2427
+ * ```
2428
+ *
2429
+ * @generated from field: repeated sfixed32 example = 8;
2430
+ */
2431
+ example: number[];
2432
+ };
2433
+
2434
+ /**
2435
+ * Describes the message buf.validate.SFixed32Rules.
2436
+ * Use `create(SFixed32RulesSchema)` to create a new message.
2437
+ */
2438
+ export const SFixed32RulesSchema: GenMessage<SFixed32Rules> = /*@__PURE__*/
2439
+ messageDesc(file_buf_validate_validate, 16);
2440
+
2441
+ /**
2442
+ * SFixed64Rules describes the rules applied to `fixed64` values.
2443
+ *
2444
+ * @generated from message buf.validate.SFixed64Rules
2445
+ */
2446
+ export type SFixed64Rules = Message<"buf.validate.SFixed64Rules"> & {
2447
+ /**
2448
+ * `const` requires the field value to exactly match the specified value. If
2449
+ * the field value doesn't match, an error message is generated.
2450
+ *
2451
+ * ```proto
2452
+ * message MySFixed64 {
2453
+ * // value must equal 42
2454
+ * sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];
2455
+ * }
2456
+ * ```
2457
+ *
2458
+ * @generated from field: optional sfixed64 const = 1;
2459
+ */
2460
+ const: bigint;
2461
+
2462
+ /**
2463
+ * @generated from oneof buf.validate.SFixed64Rules.less_than
2464
+ */
2465
+ lessThan: {
2466
+ /**
2467
+ * `lt` requires the field value to be less than the specified value (field <
2468
+ * value). If the field value is equal to or greater than the specified value,
2469
+ * an error message is generated.
2470
+ *
2471
+ * ```proto
2472
+ * message MySFixed64 {
2473
+ * // value must be less than 10
2474
+ * sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];
2475
+ * }
2476
+ * ```
2477
+ *
2478
+ * @generated from field: sfixed64 lt = 2;
2479
+ */
2480
+ value: bigint;
2481
+ case: "lt";
2482
+ } | {
2483
+ /**
2484
+ * `lte` requires the field value to be less than or equal to the specified
2485
+ * value (field <= value). If the field value is greater than the specified
2486
+ * value, an error message is generated.
2487
+ *
2488
+ * ```proto
2489
+ * message MySFixed64 {
2490
+ * // value must be less than or equal to 10
2491
+ * sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];
2492
+ * }
2493
+ * ```
2494
+ *
2495
+ * @generated from field: sfixed64 lte = 3;
2496
+ */
2497
+ value: bigint;
2498
+ case: "lte";
2499
+ } | { case: undefined; value?: undefined };
2500
+
2501
+ /**
2502
+ * @generated from oneof buf.validate.SFixed64Rules.greater_than
2503
+ */
2504
+ greaterThan: {
2505
+ /**
2506
+ * `gt` requires the field value to be greater than the specified value
2507
+ * (exclusive). If the value of `gt` is larger than a specified `lt` or
2508
+ * `lte`, the range is reversed, and the field value must be outside the
2509
+ * specified range. If the field value doesn't meet the required conditions,
2510
+ * an error message is generated.
2511
+ *
2512
+ * ```proto
2513
+ * message MySFixed64 {
2514
+ * // value must be greater than 5 [sfixed64.gt]
2515
+ * sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];
2516
+ *
2517
+ * // value must be greater than 5 and less than 10 [sfixed64.gt_lt]
2518
+ * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];
2519
+ *
2520
+ * // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]
2521
+ * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];
2522
+ * }
2523
+ * ```
2524
+ *
2525
+ * @generated from field: sfixed64 gt = 4;
2526
+ */
2527
+ value: bigint;
2528
+ case: "gt";
2529
+ } | {
2530
+ /**
2531
+ * `gte` requires the field value to be greater than or equal to the specified
2532
+ * value (exclusive). If the value of `gte` is larger than a specified `lt`
2533
+ * or `lte`, the range is reversed, and the field value must be outside the
2534
+ * specified range. If the field value doesn't meet the required conditions,
2535
+ * an error message is generated.
2536
+ *
2537
+ * ```proto
2538
+ * message MySFixed64 {
2539
+ * // value must be greater than or equal to 5 [sfixed64.gte]
2540
+ * sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];
2541
+ *
2542
+ * // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]
2543
+ * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];
2544
+ *
2545
+ * // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]
2546
+ * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];
2547
+ * }
2548
+ * ```
2549
+ *
2550
+ * @generated from field: sfixed64 gte = 5;
2551
+ */
2552
+ value: bigint;
2553
+ case: "gte";
2554
+ } | { case: undefined; value?: undefined };
2555
+
2556
+ /**
2557
+ * `in` requires the field value to be equal to one of the specified values.
2558
+ * If the field value isn't one of the specified values, an error message is
2559
+ * generated.
2560
+ *
2561
+ * ```proto
2562
+ * message MySFixed64 {
2563
+ * // value must be in list [1, 2, 3]
2564
+ * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { in: [1, 2, 3] }];
2565
+ * }
2566
+ * ```
2567
+ *
2568
+ * @generated from field: repeated sfixed64 in = 6;
2569
+ */
2570
+ in: bigint[];
2571
+
2572
+ /**
2573
+ * `not_in` requires the field value to not be equal to any of the specified
2574
+ * values. If the field value is one of the specified values, an error
2575
+ * message is generated.
2576
+ *
2577
+ * ```proto
2578
+ * message MySFixed64 {
2579
+ * // value must not be in list [1, 2, 3]
2580
+ * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { not_in: [1, 2, 3] }];
2581
+ * }
2582
+ * ```
2583
+ *
2584
+ * @generated from field: repeated sfixed64 not_in = 7;
2585
+ */
2586
+ notIn: bigint[];
2587
+
2588
+ /**
2589
+ * `example` specifies values that the field may have. These values SHOULD
2590
+ * conform to other rules. `example` values will not impact validation
2591
+ * but may be used as helpful guidance on how to populate the given field.
2592
+ *
2593
+ * ```proto
2594
+ * message MySFixed64 {
2595
+ * sfixed64 value = 1 [
2596
+ * (buf.validate.field).sfixed64.example = 1,
2597
+ * (buf.validate.field).sfixed64.example = 2
2598
+ * ];
2599
+ * }
2600
+ * ```
2601
+ *
2602
+ * @generated from field: repeated sfixed64 example = 8;
2603
+ */
2604
+ example: bigint[];
2605
+ };
2606
+
2607
+ /**
2608
+ * Describes the message buf.validate.SFixed64Rules.
2609
+ * Use `create(SFixed64RulesSchema)` to create a new message.
2610
+ */
2611
+ export const SFixed64RulesSchema: GenMessage<SFixed64Rules> = /*@__PURE__*/
2612
+ messageDesc(file_buf_validate_validate, 17);
2613
+
2614
+ /**
2615
+ * BoolRules describes the rules applied to `bool` values. These rules
2616
+ * may also be applied to the `google.protobuf.BoolValue` Well-Known-Type.
2617
+ *
2618
+ * @generated from message buf.validate.BoolRules
2619
+ */
2620
+ export type BoolRules = Message<"buf.validate.BoolRules"> & {
2621
+ /**
2622
+ * `const` requires the field value to exactly match the specified boolean value.
2623
+ * If the field value doesn't match, an error message is generated.
2624
+ *
2625
+ * ```proto
2626
+ * message MyBool {
2627
+ * // value must equal true
2628
+ * bool value = 1 [(buf.validate.field).bool.const = true];
2629
+ * }
2630
+ * ```
2631
+ *
2632
+ * @generated from field: optional bool const = 1;
2633
+ */
2634
+ const: boolean;
2635
+
2636
+ /**
2637
+ * `example` specifies values that the field may have. These values SHOULD
2638
+ * conform to other rules. `example` values will not impact validation
2639
+ * but may be used as helpful guidance on how to populate the given field.
2640
+ *
2641
+ * ```proto
2642
+ * message MyBool {
2643
+ * bool value = 1 [
2644
+ * (buf.validate.field).bool.example = 1,
2645
+ * (buf.validate.field).bool.example = 2
2646
+ * ];
2647
+ * }
2648
+ * ```
2649
+ *
2650
+ * @generated from field: repeated bool example = 2;
2651
+ */
2652
+ example: boolean[];
2653
+ };
2654
+
2655
+ /**
2656
+ * Describes the message buf.validate.BoolRules.
2657
+ * Use `create(BoolRulesSchema)` to create a new message.
2658
+ */
2659
+ export const BoolRulesSchema: GenMessage<BoolRules> = /*@__PURE__*/
2660
+ messageDesc(file_buf_validate_validate, 18);
2661
+
2662
+ /**
2663
+ * StringRules describes the rules applied to `string` values These
2664
+ * rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type.
2665
+ *
2666
+ * @generated from message buf.validate.StringRules
2667
+ */
2668
+ export type StringRules = Message<"buf.validate.StringRules"> & {
2669
+ /**
2670
+ * `const` requires the field value to exactly match the specified value. If
2671
+ * the field value doesn't match, an error message is generated.
2672
+ *
2673
+ * ```proto
2674
+ * message MyString {
2675
+ * // value must equal `hello`
2676
+ * string value = 1 [(buf.validate.field).string.const = "hello"];
2677
+ * }
2678
+ * ```
2679
+ *
2680
+ * @generated from field: optional string const = 1;
2681
+ */
2682
+ const: string;
2683
+
2684
+ /**
2685
+ * `len` dictates that the field value must have the specified
2686
+ * number of characters (Unicode code points), which may differ from the number
2687
+ * of bytes in the string. If the field value does not meet the specified
2688
+ * length, an error message will be generated.
2689
+ *
2690
+ * ```proto
2691
+ * message MyString {
2692
+ * // value length must be 5 characters
2693
+ * string value = 1 [(buf.validate.field).string.len = 5];
2694
+ * }
2695
+ * ```
2696
+ *
2697
+ * @generated from field: optional uint64 len = 19;
2698
+ */
2699
+ len: bigint;
2700
+
2701
+ /**
2702
+ * `min_len` specifies that the field value must have at least the specified
2703
+ * number of characters (Unicode code points), which may differ from the number
2704
+ * of bytes in the string. If the field value contains fewer characters, an error
2705
+ * message will be generated.
2706
+ *
2707
+ * ```proto
2708
+ * message MyString {
2709
+ * // value length must be at least 3 characters
2710
+ * string value = 1 [(buf.validate.field).string.min_len = 3];
2711
+ * }
2712
+ * ```
2713
+ *
2714
+ * @generated from field: optional uint64 min_len = 2;
2715
+ */
2716
+ minLen: bigint;
2717
+
2718
+ /**
2719
+ * `max_len` specifies that the field value must have no more than the specified
2720
+ * number of characters (Unicode code points), which may differ from the
2721
+ * number of bytes in the string. If the field value contains more characters,
2722
+ * an error message will be generated.
2723
+ *
2724
+ * ```proto
2725
+ * message MyString {
2726
+ * // value length must be at most 10 characters
2727
+ * string value = 1 [(buf.validate.field).string.max_len = 10];
2728
+ * }
2729
+ * ```
2730
+ *
2731
+ * @generated from field: optional uint64 max_len = 3;
2732
+ */
2733
+ maxLen: bigint;
2734
+
2735
+ /**
2736
+ * `len_bytes` dictates that the field value must have the specified number of
2737
+ * bytes. If the field value does not match the specified length in bytes,
2738
+ * an error message will be generated.
2739
+ *
2740
+ * ```proto
2741
+ * message MyString {
2742
+ * // value length must be 6 bytes
2743
+ * string value = 1 [(buf.validate.field).string.len_bytes = 6];
2744
+ * }
2745
+ * ```
2746
+ *
2747
+ * @generated from field: optional uint64 len_bytes = 20;
2748
+ */
2749
+ lenBytes: bigint;
2750
+
2751
+ /**
2752
+ * `min_bytes` specifies that the field value must have at least the specified
2753
+ * number of bytes. If the field value contains fewer bytes, an error message
2754
+ * will be generated.
2755
+ *
2756
+ * ```proto
2757
+ * message MyString {
2758
+ * // value length must be at least 4 bytes
2759
+ * string value = 1 [(buf.validate.field).string.min_bytes = 4];
2760
+ * }
2761
+ *
2762
+ * ```
2763
+ *
2764
+ * @generated from field: optional uint64 min_bytes = 4;
2765
+ */
2766
+ minBytes: bigint;
2767
+
2768
+ /**
2769
+ * `max_bytes` specifies that the field value must have no more than the
2770
+ * specified number of bytes. If the field value contains more bytes, an
2771
+ * error message will be generated.
2772
+ *
2773
+ * ```proto
2774
+ * message MyString {
2775
+ * // value length must be at most 8 bytes
2776
+ * string value = 1 [(buf.validate.field).string.max_bytes = 8];
2777
+ * }
2778
+ * ```
2779
+ *
2780
+ * @generated from field: optional uint64 max_bytes = 5;
2781
+ */
2782
+ maxBytes: bigint;
2783
+
2784
+ /**
2785
+ * `pattern` specifies that the field value must match the specified
2786
+ * regular expression (RE2 syntax), with the expression provided without any
2787
+ * delimiters. If the field value doesn't match the regular expression, an
2788
+ * error message will be generated.
2789
+ *
2790
+ * ```proto
2791
+ * message MyString {
2792
+ * // value does not match regex pattern `^[a-zA-Z]//$`
2793
+ * string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
2794
+ * }
2795
+ * ```
2796
+ *
2797
+ * @generated from field: optional string pattern = 6;
2798
+ */
2799
+ pattern: string;
2800
+
2801
+ /**
2802
+ * `prefix` specifies that the field value must have the
2803
+ * specified substring at the beginning of the string. If the field value
2804
+ * doesn't start with the specified prefix, an error message will be
2805
+ * generated.
2806
+ *
2807
+ * ```proto
2808
+ * message MyString {
2809
+ * // value does not have prefix `pre`
2810
+ * string value = 1 [(buf.validate.field).string.prefix = "pre"];
2811
+ * }
2812
+ * ```
2813
+ *
2814
+ * @generated from field: optional string prefix = 7;
2815
+ */
2816
+ prefix: string;
2817
+
2818
+ /**
2819
+ * `suffix` specifies that the field value must have the
2820
+ * specified substring at the end of the string. If the field value doesn't
2821
+ * end with the specified suffix, an error message will be generated.
2822
+ *
2823
+ * ```proto
2824
+ * message MyString {
2825
+ * // value does not have suffix `post`
2826
+ * string value = 1 [(buf.validate.field).string.suffix = "post"];
2827
+ * }
2828
+ * ```
2829
+ *
2830
+ * @generated from field: optional string suffix = 8;
2831
+ */
2832
+ suffix: string;
2833
+
2834
+ /**
2835
+ * `contains` specifies that the field value must have the
2836
+ * specified substring anywhere in the string. If the field value doesn't
2837
+ * contain the specified substring, an error message will be generated.
2838
+ *
2839
+ * ```proto
2840
+ * message MyString {
2841
+ * // value does not contain substring `inside`.
2842
+ * string value = 1 [(buf.validate.field).string.contains = "inside"];
2843
+ * }
2844
+ * ```
2845
+ *
2846
+ * @generated from field: optional string contains = 9;
2847
+ */
2848
+ contains: string;
2849
+
2850
+ /**
2851
+ * `not_contains` specifies that the field value must not have the
2852
+ * specified substring anywhere in the string. If the field value contains
2853
+ * the specified substring, an error message will be generated.
2854
+ *
2855
+ * ```proto
2856
+ * message MyString {
2857
+ * // value contains substring `inside`.
2858
+ * string value = 1 [(buf.validate.field).string.not_contains = "inside"];
2859
+ * }
2860
+ * ```
2861
+ *
2862
+ * @generated from field: optional string not_contains = 23;
2863
+ */
2864
+ notContains: string;
2865
+
2866
+ /**
2867
+ * `in` specifies that the field value must be equal to one of the specified
2868
+ * values. If the field value isn't one of the specified values, an error
2869
+ * message will be generated.
2870
+ *
2871
+ * ```proto
2872
+ * message MyString {
2873
+ * // value must be in list ["apple", "banana"]
2874
+ * string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
2875
+ * }
2876
+ * ```
2877
+ *
2878
+ * @generated from field: repeated string in = 10;
2879
+ */
2880
+ in: string[];
2881
+
2882
+ /**
2883
+ * `not_in` specifies that the field value cannot be equal to any
2884
+ * of the specified values. If the field value is one of the specified values,
2885
+ * an error message will be generated.
2886
+ * ```proto
2887
+ * message MyString {
2888
+ * // value must not be in list ["orange", "grape"]
2889
+ * string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
2890
+ * }
2891
+ * ```
2892
+ *
2893
+ * @generated from field: repeated string not_in = 11;
2894
+ */
2895
+ notIn: string[];
2896
+
2897
+ /**
2898
+ * `WellKnown` rules provide advanced rules against common string
2899
+ * patterns.
2900
+ *
2901
+ * @generated from oneof buf.validate.StringRules.well_known
2902
+ */
2903
+ wellKnown: {
2904
+ /**
2905
+ * `email` specifies that the field value must be a valid email address, for
2906
+ * example "foo@example.com".
2907
+ *
2908
+ * Conforms to the definition for a valid email address from the [HTML standard](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address).
2909
+ * Note that this standard willfully deviates from [RFC 5322](https://datatracker.ietf.org/doc/html/rfc5322),
2910
+ * which allows many unexpected forms of email addresses and will easily match
2911
+ * a typographical error.
2912
+ *
2913
+ * If the field value isn't a valid email address, an error message will be generated.
2914
+ *
2915
+ * ```proto
2916
+ * message MyString {
2917
+ * // value must be a valid email address
2918
+ * string value = 1 [(buf.validate.field).string.email = true];
2919
+ * }
2920
+ * ```
2921
+ *
2922
+ * @generated from field: bool email = 12;
2923
+ */
2924
+ value: boolean;
2925
+ case: "email";
2926
+ } | {
2927
+ /**
2928
+ * `hostname` specifies that the field value must be a valid hostname, for
2929
+ * example "foo.example.com".
2930
+ *
2931
+ * A valid hostname follows the rules below:
2932
+ * - The name consists of one or more labels, separated by a dot (".").
2933
+ * - Each label can be 1 to 63 alphanumeric characters.
2934
+ * - A label can contain hyphens ("-"), but must not start or end with a hyphen.
2935
+ * - The right-most label must not be digits only.
2936
+ * - The name can have a trailing dot—for example, "foo.example.com.".
2937
+ * - The name can be 253 characters at most, excluding the optional trailing dot.
2938
+ *
2939
+ * If the field value isn't a valid hostname, an error message will be generated.
2940
+ *
2941
+ * ```proto
2942
+ * message MyString {
2943
+ * // value must be a valid hostname
2944
+ * string value = 1 [(buf.validate.field).string.hostname = true];
2945
+ * }
2946
+ * ```
2947
+ *
2948
+ * @generated from field: bool hostname = 13;
2949
+ */
2950
+ value: boolean;
2951
+ case: "hostname";
2952
+ } | {
2953
+ /**
2954
+ * `ip` specifies that the field value must be a valid IP (v4 or v6) address.
2955
+ *
2956
+ * IPv4 addresses are expected in the dotted decimal format—for example, "192.168.5.21".
2957
+ * IPv6 addresses are expected in their text representation—for example, "::1",
2958
+ * or "2001:0DB8:ABCD:0012::0".
2959
+ *
2960
+ * Both formats are well-defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).
2961
+ * Zone identifiers for IPv6 addresses (for example, "fe80::a%en1") are supported.
2962
+ *
2963
+ * If the field value isn't a valid IP address, an error message will be
2964
+ * generated.
2965
+ *
2966
+ * ```proto
2967
+ * message MyString {
2968
+ * // value must be a valid IP address
2969
+ * string value = 1 [(buf.validate.field).string.ip = true];
2970
+ * }
2971
+ * ```
2972
+ *
2973
+ * @generated from field: bool ip = 14;
2974
+ */
2975
+ value: boolean;
2976
+ case: "ip";
2977
+ } | {
2978
+ /**
2979
+ * `ipv4` specifies that the field value must be a valid IPv4 address—for
2980
+ * example "192.168.5.21". If the field value isn't a valid IPv4 address, an
2981
+ * error message will be generated.
2982
+ *
2983
+ * ```proto
2984
+ * message MyString {
2985
+ * // value must be a valid IPv4 address
2986
+ * string value = 1 [(buf.validate.field).string.ipv4 = true];
2987
+ * }
2988
+ * ```
2989
+ *
2990
+ * @generated from field: bool ipv4 = 15;
2991
+ */
2992
+ value: boolean;
2993
+ case: "ipv4";
2994
+ } | {
2995
+ /**
2996
+ * `ipv6` specifies that the field value must be a valid IPv6 address—for
2997
+ * example "::1", or "d7a:115c:a1e0:ab12:4843:cd96:626b:430b". If the field
2998
+ * value is not a valid IPv6 address, an error message will be generated.
2999
+ *
3000
+ * ```proto
3001
+ * message MyString {
3002
+ * // value must be a valid IPv6 address
3003
+ * string value = 1 [(buf.validate.field).string.ipv6 = true];
3004
+ * }
3005
+ * ```
3006
+ *
3007
+ * @generated from field: bool ipv6 = 16;
3008
+ */
3009
+ value: boolean;
3010
+ case: "ipv6";
3011
+ } | {
3012
+ /**
3013
+ * `uri` specifies that the field value must be a valid URI, for example
3014
+ * "https://example.com/foo/bar?baz=quux#frag".
3015
+ *
3016
+ * URI is defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).
3017
+ * Zone Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).
3018
+ *
3019
+ * If the field value isn't a valid URI, an error message will be generated.
3020
+ *
3021
+ * ```proto
3022
+ * message MyString {
3023
+ * // value must be a valid URI
3024
+ * string value = 1 [(buf.validate.field).string.uri = true];
3025
+ * }
3026
+ * ```
3027
+ *
3028
+ * @generated from field: bool uri = 17;
3029
+ */
3030
+ value: boolean;
3031
+ case: "uri";
3032
+ } | {
3033
+ /**
3034
+ * `uri_ref` specifies that the field value must be a valid URI Reference—either
3035
+ * a URI such as "https://example.com/foo/bar?baz=quux#frag", or a Relative
3036
+ * Reference such as "./foo/bar?query".
3037
+ *
3038
+ * URI, URI Reference, and Relative Reference are defined in the internet
3039
+ * standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). Zone
3040
+ * Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).
3041
+ *
3042
+ * If the field value isn't a valid URI Reference, an error message will be
3043
+ * generated.
3044
+ *
3045
+ * ```proto
3046
+ * message MyString {
3047
+ * // value must be a valid URI Reference
3048
+ * string value = 1 [(buf.validate.field).string.uri_ref = true];
3049
+ * }
3050
+ * ```
3051
+ *
3052
+ * @generated from field: bool uri_ref = 18;
3053
+ */
3054
+ value: boolean;
3055
+ case: "uriRef";
3056
+ } | {
3057
+ /**
3058
+ * `address` specifies that the field value must be either a valid hostname
3059
+ * (for example, "example.com"), or a valid IP (v4 or v6) address (for example,
3060
+ * "192.168.0.1", or "::1"). If the field value isn't a valid hostname or IP,
3061
+ * an error message will be generated.
3062
+ *
3063
+ * ```proto
3064
+ * message MyString {
3065
+ * // value must be a valid hostname, or ip address
3066
+ * string value = 1 [(buf.validate.field).string.address = true];
3067
+ * }
3068
+ * ```
3069
+ *
3070
+ * @generated from field: bool address = 21;
3071
+ */
3072
+ value: boolean;
3073
+ case: "address";
3074
+ } | {
3075
+ /**
3076
+ * `uuid` specifies that the field value must be a valid UUID as defined by
3077
+ * [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2). If the
3078
+ * field value isn't a valid UUID, an error message will be generated.
3079
+ *
3080
+ * ```proto
3081
+ * message MyString {
3082
+ * // value must be a valid UUID
3083
+ * string value = 1 [(buf.validate.field).string.uuid = true];
3084
+ * }
3085
+ * ```
3086
+ *
3087
+ * @generated from field: bool uuid = 22;
3088
+ */
3089
+ value: boolean;
3090
+ case: "uuid";
3091
+ } | {
3092
+ /**
3093
+ * `tuuid` (trimmed UUID) specifies that the field value must be a valid UUID as
3094
+ * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2) with all dashes
3095
+ * omitted. If the field value isn't a valid UUID without dashes, an error message
3096
+ * will be generated.
3097
+ *
3098
+ * ```proto
3099
+ * message MyString {
3100
+ * // value must be a valid trimmed UUID
3101
+ * string value = 1 [(buf.validate.field).string.tuuid = true];
3102
+ * }
3103
+ * ```
3104
+ *
3105
+ * @generated from field: bool tuuid = 33;
3106
+ */
3107
+ value: boolean;
3108
+ case: "tuuid";
3109
+ } | {
3110
+ /**
3111
+ * `ip_with_prefixlen` specifies that the field value must be a valid IP
3112
+ * (v4 or v6) address with prefix length—for example, "192.168.5.21/16" or
3113
+ * "2001:0DB8:ABCD:0012::F1/64". If the field value isn't a valid IP with
3114
+ * prefix length, an error message will be generated.
3115
+ *
3116
+ * ```proto
3117
+ * message MyString {
3118
+ * // value must be a valid IP with prefix length
3119
+ * string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];
3120
+ * }
3121
+ * ```
3122
+ *
3123
+ * @generated from field: bool ip_with_prefixlen = 26;
3124
+ */
3125
+ value: boolean;
3126
+ case: "ipWithPrefixlen";
3127
+ } | {
3128
+ /**
3129
+ * `ipv4_with_prefixlen` specifies that the field value must be a valid
3130
+ * IPv4 address with prefix length—for example, "192.168.5.21/16". If the
3131
+ * field value isn't a valid IPv4 address with prefix length, an error
3132
+ * message will be generated.
3133
+ *
3134
+ * ```proto
3135
+ * message MyString {
3136
+ * // value must be a valid IPv4 address with prefix length
3137
+ * string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];
3138
+ * }
3139
+ * ```
3140
+ *
3141
+ * @generated from field: bool ipv4_with_prefixlen = 27;
3142
+ */
3143
+ value: boolean;
3144
+ case: "ipv4WithPrefixlen";
3145
+ } | {
3146
+ /**
3147
+ * `ipv6_with_prefixlen` specifies that the field value must be a valid
3148
+ * IPv6 address with prefix length—for example, "2001:0DB8:ABCD:0012::F1/64".
3149
+ * If the field value is not a valid IPv6 address with prefix length,
3150
+ * an error message will be generated.
3151
+ *
3152
+ * ```proto
3153
+ * message MyString {
3154
+ * // value must be a valid IPv6 address prefix length
3155
+ * string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];
3156
+ * }
3157
+ * ```
3158
+ *
3159
+ * @generated from field: bool ipv6_with_prefixlen = 28;
3160
+ */
3161
+ value: boolean;
3162
+ case: "ipv6WithPrefixlen";
3163
+ } | {
3164
+ /**
3165
+ * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6)
3166
+ * prefix—for example, "192.168.0.0/16" or "2001:0DB8:ABCD:0012::0/64".
3167
+ *
3168
+ * The prefix must have all zeros for the unmasked bits. For example,
3169
+ * "2001:0DB8:ABCD:0012::0/64" designates the left-most 64 bits for the
3170
+ * prefix, and the remaining 64 bits must be zero.
3171
+ *
3172
+ * If the field value isn't a valid IP prefix, an error message will be
3173
+ * generated.
3174
+ *
3175
+ * ```proto
3176
+ * message MyString {
3177
+ * // value must be a valid IP prefix
3178
+ * string value = 1 [(buf.validate.field).string.ip_prefix = true];
3179
+ * }
3180
+ * ```
3181
+ *
3182
+ * @generated from field: bool ip_prefix = 29;
3183
+ */
3184
+ value: boolean;
3185
+ case: "ipPrefix";
3186
+ } | {
3187
+ /**
3188
+ * `ipv4_prefix` specifies that the field value must be a valid IPv4
3189
+ * prefix, for example "192.168.0.0/16".
3190
+ *
3191
+ * The prefix must have all zeros for the unmasked bits. For example,
3192
+ * "192.168.0.0/16" designates the left-most 16 bits for the prefix,
3193
+ * and the remaining 16 bits must be zero.
3194
+ *
3195
+ * If the field value isn't a valid IPv4 prefix, an error message
3196
+ * will be generated.
3197
+ *
3198
+ * ```proto
3199
+ * message MyString {
3200
+ * // value must be a valid IPv4 prefix
3201
+ * string value = 1 [(buf.validate.field).string.ipv4_prefix = true];
3202
+ * }
3203
+ * ```
3204
+ *
3205
+ * @generated from field: bool ipv4_prefix = 30;
3206
+ */
3207
+ value: boolean;
3208
+ case: "ipv4Prefix";
3209
+ } | {
3210
+ /**
3211
+ * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix—for
3212
+ * example, "2001:0DB8:ABCD:0012::0/64".
3213
+ *
3214
+ * The prefix must have all zeros for the unmasked bits. For example,
3215
+ * "2001:0DB8:ABCD:0012::0/64" designates the left-most 64 bits for the
3216
+ * prefix, and the remaining 64 bits must be zero.
3217
+ *
3218
+ * If the field value is not a valid IPv6 prefix, an error message will be
3219
+ * generated.
3220
+ *
3221
+ * ```proto
3222
+ * message MyString {
3223
+ * // value must be a valid IPv6 prefix
3224
+ * string value = 1 [(buf.validate.field).string.ipv6_prefix = true];
3225
+ * }
3226
+ * ```
3227
+ *
3228
+ * @generated from field: bool ipv6_prefix = 31;
3229
+ */
3230
+ value: boolean;
3231
+ case: "ipv6Prefix";
3232
+ } | {
3233
+ /**
3234
+ * `host_and_port` specifies that the field value must be valid host/port
3235
+ * pair—for example, "example.com:8080".
3236
+ *
3237
+ * The host can be one of:
3238
+ * - An IPv4 address in dotted decimal format—for example, "192.168.5.21".
3239
+ * - An IPv6 address enclosed in square brackets—for example, "[2001:0DB8:ABCD:0012::F1]".
3240
+ * - A hostname—for example, "example.com".
3241
+ *
3242
+ * The port is separated by a colon. It must be non-empty, with a decimal number
3243
+ * in the range of 0-65535, inclusive.
3244
+ *
3245
+ * @generated from field: bool host_and_port = 32;
3246
+ */
3247
+ value: boolean;
3248
+ case: "hostAndPort";
3249
+ } | {
3250
+ /**
3251
+ * `well_known_regex` specifies a common well-known pattern
3252
+ * defined as a regex. If the field value doesn't match the well-known
3253
+ * regex, an error message will be generated.
3254
+ *
3255
+ * ```proto
3256
+ * message MyString {
3257
+ * // value must be a valid HTTP header value
3258
+ * string value = 1 [(buf.validate.field).string.well_known_regex = KNOWN_REGEX_HTTP_HEADER_VALUE];
3259
+ * }
3260
+ * ```
3261
+ *
3262
+ * #### KnownRegex
3263
+ *
3264
+ * `well_known_regex` contains some well-known patterns.
3265
+ *
3266
+ * | Name | Number | Description |
3267
+ * |-------------------------------|--------|-------------------------------------------|
3268
+ * | KNOWN_REGEX_UNSPECIFIED | 0 | |
3269
+ * | KNOWN_REGEX_HTTP_HEADER_NAME | 1 | HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2) |
3270
+ * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2 | HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4) |
3271
+ *
3272
+ * @generated from field: buf.validate.KnownRegex well_known_regex = 24;
3273
+ */
3274
+ value: KnownRegex;
3275
+ case: "wellKnownRegex";
3276
+ } | { case: undefined; value?: undefined };
3277
+
3278
+ /**
3279
+ * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to
3280
+ * enable strict header validation. By default, this is true, and HTTP header
3281
+ * validations are [RFC-compliant](https://datatracker.ietf.org/doc/html/rfc7230#section-3). Setting to false will enable looser
3282
+ * validations that only disallow `\r\n\0` characters, which can be used to
3283
+ * bypass header matching rules.
3284
+ *
3285
+ * ```proto
3286
+ * message MyString {
3287
+ * // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.
3288
+ * string value = 1 [(buf.validate.field).string.strict = false];
3289
+ * }
3290
+ * ```
3291
+ *
3292
+ * @generated from field: optional bool strict = 25;
3293
+ */
3294
+ strict: boolean;
3295
+
3296
+ /**
3297
+ * `example` specifies values that the field may have. These values SHOULD
3298
+ * conform to other rules. `example` values will not impact validation
3299
+ * but may be used as helpful guidance on how to populate the given field.
3300
+ *
3301
+ * ```proto
3302
+ * message MyString {
3303
+ * string value = 1 [
3304
+ * (buf.validate.field).string.example = "hello",
3305
+ * (buf.validate.field).string.example = "world"
3306
+ * ];
3307
+ * }
3308
+ * ```
3309
+ *
3310
+ * @generated from field: repeated string example = 34;
3311
+ */
3312
+ example: string[];
3313
+ };
3314
+
3315
+ /**
3316
+ * Describes the message buf.validate.StringRules.
3317
+ * Use `create(StringRulesSchema)` to create a new message.
3318
+ */
3319
+ export const StringRulesSchema: GenMessage<StringRules> = /*@__PURE__*/
3320
+ messageDesc(file_buf_validate_validate, 19);
3321
+
3322
+ /**
3323
+ * BytesRules describe the rules applied to `bytes` values. These rules
3324
+ * may also be applied to the `google.protobuf.BytesValue` Well-Known-Type.
3325
+ *
3326
+ * @generated from message buf.validate.BytesRules
3327
+ */
3328
+ export type BytesRules = Message<"buf.validate.BytesRules"> & {
3329
+ /**
3330
+ * `const` requires the field value to exactly match the specified bytes
3331
+ * value. If the field value doesn't match, an error message is generated.
3332
+ *
3333
+ * ```proto
3334
+ * message MyBytes {
3335
+ * // value must be "\x01\x02\x03\x04"
3336
+ * bytes value = 1 [(buf.validate.field).bytes.const = "\x01\x02\x03\x04"];
3337
+ * }
3338
+ * ```
3339
+ *
3340
+ * @generated from field: optional bytes const = 1;
3341
+ */
3342
+ const: Uint8Array;
3343
+
3344
+ /**
3345
+ * `len` requires the field value to have the specified length in bytes.
3346
+ * If the field value doesn't match, an error message is generated.
3347
+ *
3348
+ * ```proto
3349
+ * message MyBytes {
3350
+ * // value length must be 4 bytes.
3351
+ * optional bytes value = 1 [(buf.validate.field).bytes.len = 4];
3352
+ * }
3353
+ * ```
3354
+ *
3355
+ * @generated from field: optional uint64 len = 13;
3356
+ */
3357
+ len: bigint;
3358
+
3359
+ /**
3360
+ * `min_len` requires the field value to have at least the specified minimum
3361
+ * length in bytes.
3362
+ * If the field value doesn't meet the requirement, an error message is generated.
3363
+ *
3364
+ * ```proto
3365
+ * message MyBytes {
3366
+ * // value length must be at least 2 bytes.
3367
+ * optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];
3368
+ * }
3369
+ * ```
3370
+ *
3371
+ * @generated from field: optional uint64 min_len = 2;
3372
+ */
3373
+ minLen: bigint;
3374
+
3375
+ /**
3376
+ * `max_len` requires the field value to have at most the specified maximum
3377
+ * length in bytes.
3378
+ * If the field value exceeds the requirement, an error message is generated.
3379
+ *
3380
+ * ```proto
3381
+ * message MyBytes {
3382
+ * // value must be at most 6 bytes.
3383
+ * optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];
3384
+ * }
3385
+ * ```
3386
+ *
3387
+ * @generated from field: optional uint64 max_len = 3;
3388
+ */
3389
+ maxLen: bigint;
3390
+
3391
+ /**
3392
+ * `pattern` requires the field value to match the specified regular
3393
+ * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
3394
+ * The value of the field must be valid UTF-8 or validation will fail with a
3395
+ * runtime error.
3396
+ * If the field value doesn't match the pattern, an error message is generated.
3397
+ *
3398
+ * ```proto
3399
+ * message MyBytes {
3400
+ * // value must match regex pattern "^[a-zA-Z0-9]+$".
3401
+ * optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
3402
+ * }
3403
+ * ```
3404
+ *
3405
+ * @generated from field: optional string pattern = 4;
3406
+ */
3407
+ pattern: string;
3408
+
3409
+ /**
3410
+ * `prefix` requires the field value to have the specified bytes at the
3411
+ * beginning of the string.
3412
+ * If the field value doesn't meet the requirement, an error message is generated.
3413
+ *
3414
+ * ```proto
3415
+ * message MyBytes {
3416
+ * // value does not have prefix \x01\x02
3417
+ * optional bytes value = 1 [(buf.validate.field).bytes.prefix = "\x01\x02"];
3418
+ * }
3419
+ * ```
3420
+ *
3421
+ * @generated from field: optional bytes prefix = 5;
3422
+ */
3423
+ prefix: Uint8Array;
3424
+
3425
+ /**
3426
+ * `suffix` requires the field value to have the specified bytes at the end
3427
+ * of the string.
3428
+ * If the field value doesn't meet the requirement, an error message is generated.
3429
+ *
3430
+ * ```proto
3431
+ * message MyBytes {
3432
+ * // value does not have suffix \x03\x04
3433
+ * optional bytes value = 1 [(buf.validate.field).bytes.suffix = "\x03\x04"];
3434
+ * }
3435
+ * ```
3436
+ *
3437
+ * @generated from field: optional bytes suffix = 6;
3438
+ */
3439
+ suffix: Uint8Array;
3440
+
3441
+ /**
3442
+ * `contains` requires the field value to have the specified bytes anywhere in
3443
+ * the string.
3444
+ * If the field value doesn't meet the requirement, an error message is generated.
3445
+ *
3446
+ * ```protobuf
3447
+ * message MyBytes {
3448
+ * // value does not contain \x02\x03
3449
+ * optional bytes value = 1 [(buf.validate.field).bytes.contains = "\x02\x03"];
3450
+ * }
3451
+ * ```
3452
+ *
3453
+ * @generated from field: optional bytes contains = 7;
3454
+ */
3455
+ contains: Uint8Array;
3456
+
3457
+ /**
3458
+ * `in` requires the field value to be equal to one of the specified
3459
+ * values. If the field value doesn't match any of the specified values, an
3460
+ * error message is generated.
3461
+ *
3462
+ * ```protobuf
3463
+ * message MyBytes {
3464
+ * // value must in ["\x01\x02", "\x02\x03", "\x03\x04"]
3465
+ * optional bytes value = 1 [(buf.validate.field).bytes.in = {"\x01\x02", "\x02\x03", "\x03\x04"}];
3466
+ * }
3467
+ * ```
3468
+ *
3469
+ * @generated from field: repeated bytes in = 8;
3470
+ */
3471
+ in: Uint8Array[];
3472
+
3473
+ /**
3474
+ * `not_in` requires the field value to be not equal to any of the specified
3475
+ * values.
3476
+ * If the field value matches any of the specified values, an error message is
3477
+ * generated.
3478
+ *
3479
+ * ```proto
3480
+ * message MyBytes {
3481
+ * // value must not in ["\x01\x02", "\x02\x03", "\x03\x04"]
3482
+ * optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"\x01\x02", "\x02\x03", "\x03\x04"}];
3483
+ * }
3484
+ * ```
3485
+ *
3486
+ * @generated from field: repeated bytes not_in = 9;
3487
+ */
3488
+ notIn: Uint8Array[];
3489
+
3490
+ /**
3491
+ * WellKnown rules provide advanced rules against common byte
3492
+ * patterns
3493
+ *
3494
+ * @generated from oneof buf.validate.BytesRules.well_known
3495
+ */
3496
+ wellKnown: {
3497
+ /**
3498
+ * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.
3499
+ * If the field value doesn't meet this rule, an error message is generated.
3500
+ *
3501
+ * ```proto
3502
+ * message MyBytes {
3503
+ * // value must be a valid IP address
3504
+ * optional bytes value = 1 [(buf.validate.field).bytes.ip = true];
3505
+ * }
3506
+ * ```
3507
+ *
3508
+ * @generated from field: bool ip = 10;
3509
+ */
3510
+ value: boolean;
3511
+ case: "ip";
3512
+ } | {
3513
+ /**
3514
+ * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.
3515
+ * If the field value doesn't meet this rule, an error message is generated.
3516
+ *
3517
+ * ```proto
3518
+ * message MyBytes {
3519
+ * // value must be a valid IPv4 address
3520
+ * optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];
3521
+ * }
3522
+ * ```
3523
+ *
3524
+ * @generated from field: bool ipv4 = 11;
3525
+ */
3526
+ value: boolean;
3527
+ case: "ipv4";
3528
+ } | {
3529
+ /**
3530
+ * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.
3531
+ * If the field value doesn't meet this rule, an error message is generated.
3532
+ * ```proto
3533
+ * message MyBytes {
3534
+ * // value must be a valid IPv6 address
3535
+ * optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];
3536
+ * }
3537
+ * ```
3538
+ *
3539
+ * @generated from field: bool ipv6 = 12;
3540
+ */
3541
+ value: boolean;
3542
+ case: "ipv6";
3543
+ } | { case: undefined; value?: undefined };
3544
+
3545
+ /**
3546
+ * `example` specifies values that the field may have. These values SHOULD
3547
+ * conform to other rules. `example` values will not impact validation
3548
+ * but may be used as helpful guidance on how to populate the given field.
3549
+ *
3550
+ * ```proto
3551
+ * message MyBytes {
3552
+ * bytes value = 1 [
3553
+ * (buf.validate.field).bytes.example = "\x01\x02",
3554
+ * (buf.validate.field).bytes.example = "\x02\x03"
3555
+ * ];
3556
+ * }
3557
+ * ```
3558
+ *
3559
+ * @generated from field: repeated bytes example = 14;
3560
+ */
3561
+ example: Uint8Array[];
3562
+ };
3563
+
3564
+ /**
3565
+ * Describes the message buf.validate.BytesRules.
3566
+ * Use `create(BytesRulesSchema)` to create a new message.
3567
+ */
3568
+ export const BytesRulesSchema: GenMessage<BytesRules> = /*@__PURE__*/
3569
+ messageDesc(file_buf_validate_validate, 20);
3570
+
3571
+ /**
3572
+ * EnumRules describe the rules applied to `enum` values.
3573
+ *
3574
+ * @generated from message buf.validate.EnumRules
3575
+ */
3576
+ export type EnumRules = Message<"buf.validate.EnumRules"> & {
3577
+ /**
3578
+ * `const` requires the field value to exactly match the specified enum value.
3579
+ * If the field value doesn't match, an error message is generated.
3580
+ *
3581
+ * ```proto
3582
+ * enum MyEnum {
3583
+ * MY_ENUM_UNSPECIFIED = 0;
3584
+ * MY_ENUM_VALUE1 = 1;
3585
+ * MY_ENUM_VALUE2 = 2;
3586
+ * }
3587
+ *
3588
+ * message MyMessage {
3589
+ * // The field `value` must be exactly MY_ENUM_VALUE1.
3590
+ * MyEnum value = 1 [(buf.validate.field).enum.const = 1];
3591
+ * }
3592
+ * ```
3593
+ *
3594
+ * @generated from field: optional int32 const = 1;
3595
+ */
3596
+ const: number;
3597
+
3598
+ /**
3599
+ * `defined_only` requires the field value to be one of the defined values for
3600
+ * this enum, failing on any undefined value.
3601
+ *
3602
+ * ```proto
3603
+ * enum MyEnum {
3604
+ * MY_ENUM_UNSPECIFIED = 0;
3605
+ * MY_ENUM_VALUE1 = 1;
3606
+ * MY_ENUM_VALUE2 = 2;
3607
+ * }
3608
+ *
3609
+ * message MyMessage {
3610
+ * // The field `value` must be a defined value of MyEnum.
3611
+ * MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];
3612
+ * }
3613
+ * ```
3614
+ *
3615
+ * @generated from field: optional bool defined_only = 2;
3616
+ */
3617
+ definedOnly: boolean;
3618
+
3619
+ /**
3620
+ * `in` requires the field value to be equal to one of the
3621
+ * specified enum values. If the field value doesn't match any of the
3622
+ * specified values, an error message is generated.
3623
+ *
3624
+ * ```proto
3625
+ * enum MyEnum {
3626
+ * MY_ENUM_UNSPECIFIED = 0;
3627
+ * MY_ENUM_VALUE1 = 1;
3628
+ * MY_ENUM_VALUE2 = 2;
3629
+ * }
3630
+ *
3631
+ * message MyMessage {
3632
+ * // The field `value` must be equal to one of the specified values.
3633
+ * MyEnum value = 1 [(buf.validate.field).enum = { in: [1, 2]}];
3634
+ * }
3635
+ * ```
3636
+ *
3637
+ * @generated from field: repeated int32 in = 3;
3638
+ */
3639
+ in: number[];
3640
+
3641
+ /**
3642
+ * `not_in` requires the field value to be not equal to any of the
3643
+ * specified enum values. If the field value matches one of the specified
3644
+ * values, an error message is generated.
3645
+ *
3646
+ * ```proto
3647
+ * enum MyEnum {
3648
+ * MY_ENUM_UNSPECIFIED = 0;
3649
+ * MY_ENUM_VALUE1 = 1;
3650
+ * MY_ENUM_VALUE2 = 2;
3651
+ * }
3652
+ *
3653
+ * message MyMessage {
3654
+ * // The field `value` must not be equal to any of the specified values.
3655
+ * MyEnum value = 1 [(buf.validate.field).enum = { not_in: [1, 2]}];
3656
+ * }
3657
+ * ```
3658
+ *
3659
+ * @generated from field: repeated int32 not_in = 4;
3660
+ */
3661
+ notIn: number[];
3662
+
3663
+ /**
3664
+ * `example` specifies values that the field may have. These values SHOULD
3665
+ * conform to other rules. `example` values will not impact validation
3666
+ * but may be used as helpful guidance on how to populate the given field.
3667
+ *
3668
+ * ```proto
3669
+ * enum MyEnum {
3670
+ * MY_ENUM_UNSPECIFIED = 0;
3671
+ * MY_ENUM_VALUE1 = 1;
3672
+ * MY_ENUM_VALUE2 = 2;
3673
+ * }
3674
+ *
3675
+ * message MyMessage {
3676
+ * (buf.validate.field).enum.example = 1,
3677
+ * (buf.validate.field).enum.example = 2
3678
+ * }
3679
+ * ```
3680
+ *
3681
+ * @generated from field: repeated int32 example = 5;
3682
+ */
3683
+ example: number[];
3684
+ };
3685
+
3686
+ /**
3687
+ * Describes the message buf.validate.EnumRules.
3688
+ * Use `create(EnumRulesSchema)` to create a new message.
3689
+ */
3690
+ export const EnumRulesSchema: GenMessage<EnumRules> = /*@__PURE__*/
3691
+ messageDesc(file_buf_validate_validate, 21);
3692
+
3693
+ /**
3694
+ * RepeatedRules describe the rules applied to `repeated` values.
3695
+ *
3696
+ * @generated from message buf.validate.RepeatedRules
3697
+ */
3698
+ export type RepeatedRules = Message<"buf.validate.RepeatedRules"> & {
3699
+ /**
3700
+ * `min_items` requires that this field must contain at least the specified
3701
+ * minimum number of items.
3702
+ *
3703
+ * Note that `min_items = 1` is equivalent to setting a field as `required`.
3704
+ *
3705
+ * ```proto
3706
+ * message MyRepeated {
3707
+ * // value must contain at least 2 items
3708
+ * repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];
3709
+ * }
3710
+ * ```
3711
+ *
3712
+ * @generated from field: optional uint64 min_items = 1;
3713
+ */
3714
+ minItems: bigint;
3715
+
3716
+ /**
3717
+ * `max_items` denotes that this field must not exceed a
3718
+ * certain number of items as the upper limit. If the field contains more
3719
+ * items than specified, an error message will be generated, requiring the
3720
+ * field to maintain no more than the specified number of items.
3721
+ *
3722
+ * ```proto
3723
+ * message MyRepeated {
3724
+ * // value must contain no more than 3 item(s)
3725
+ * repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];
3726
+ * }
3727
+ * ```
3728
+ *
3729
+ * @generated from field: optional uint64 max_items = 2;
3730
+ */
3731
+ maxItems: bigint;
3732
+
3733
+ /**
3734
+ * `unique` indicates that all elements in this field must
3735
+ * be unique. This rule is strictly applicable to scalar and enum
3736
+ * types, with message types not being supported.
3737
+ *
3738
+ * ```proto
3739
+ * message MyRepeated {
3740
+ * // repeated value must contain unique items
3741
+ * repeated string value = 1 [(buf.validate.field).repeated.unique = true];
3742
+ * }
3743
+ * ```
3744
+ *
3745
+ * @generated from field: optional bool unique = 3;
3746
+ */
3747
+ unique: boolean;
3748
+
3749
+ /**
3750
+ * `items` details the rules to be applied to each item
3751
+ * in the field. Even for repeated message fields, validation is executed
3752
+ * against each item unless `ignore` is specified.
3753
+ *
3754
+ * ```proto
3755
+ * message MyRepeated {
3756
+ * // The items in the field `value` must follow the specified rules.
3757
+ * repeated string value = 1 [(buf.validate.field).repeated.items = {
3758
+ * string: {
3759
+ * min_len: 3
3760
+ * max_len: 10
3761
+ * }
3762
+ * }];
3763
+ * }
3764
+ * ```
3765
+ *
3766
+ * Note that the `required` rule does not apply. Repeated items
3767
+ * cannot be unset.
3768
+ *
3769
+ * @generated from field: optional buf.validate.FieldRules items = 4;
3770
+ */
3771
+ items?: FieldRules;
3772
+ };
3773
+
3774
+ /**
3775
+ * Describes the message buf.validate.RepeatedRules.
3776
+ * Use `create(RepeatedRulesSchema)` to create a new message.
3777
+ */
3778
+ export const RepeatedRulesSchema: GenMessage<RepeatedRules> = /*@__PURE__*/
3779
+ messageDesc(file_buf_validate_validate, 22);
3780
+
3781
+ /**
3782
+ * MapRules describe the rules applied to `map` values.
3783
+ *
3784
+ * @generated from message buf.validate.MapRules
3785
+ */
3786
+ export type MapRules = Message<"buf.validate.MapRules"> & {
3787
+ /**
3788
+ * Specifies the minimum number of key-value pairs allowed. If the field has
3789
+ * fewer key-value pairs than specified, an error message is generated.
3790
+ *
3791
+ * ```proto
3792
+ * message MyMap {
3793
+ * // The field `value` must have at least 2 key-value pairs.
3794
+ * map<string, string> value = 1 [(buf.validate.field).map.min_pairs = 2];
3795
+ * }
3796
+ * ```
3797
+ *
3798
+ * @generated from field: optional uint64 min_pairs = 1;
3799
+ */
3800
+ minPairs: bigint;
3801
+
3802
+ /**
3803
+ * Specifies the maximum number of key-value pairs allowed. If the field has
3804
+ * more key-value pairs than specified, an error message is generated.
3805
+ *
3806
+ * ```proto
3807
+ * message MyMap {
3808
+ * // The field `value` must have at most 3 key-value pairs.
3809
+ * map<string, string> value = 1 [(buf.validate.field).map.max_pairs = 3];
3810
+ * }
3811
+ * ```
3812
+ *
3813
+ * @generated from field: optional uint64 max_pairs = 2;
3814
+ */
3815
+ maxPairs: bigint;
3816
+
3817
+ /**
3818
+ * Specifies the rules to be applied to each key in the field.
3819
+ *
3820
+ * ```proto
3821
+ * message MyMap {
3822
+ * // The keys in the field `value` must follow the specified rules.
3823
+ * map<string, string> value = 1 [(buf.validate.field).map.keys = {
3824
+ * string: {
3825
+ * min_len: 3
3826
+ * max_len: 10
3827
+ * }
3828
+ * }];
3829
+ * }
3830
+ * ```
3831
+ *
3832
+ * Note that the `required` rule does not apply. Map keys cannot be unset.
3833
+ *
3834
+ * @generated from field: optional buf.validate.FieldRules keys = 4;
3835
+ */
3836
+ keys?: FieldRules;
3837
+
3838
+ /**
3839
+ * Specifies the rules to be applied to the value of each key in the
3840
+ * field. Message values will still have their validations evaluated unless
3841
+ * `ignore` is specified.
3842
+ *
3843
+ * ```proto
3844
+ * message MyMap {
3845
+ * // The values in the field `value` must follow the specified rules.
3846
+ * map<string, string> value = 1 [(buf.validate.field).map.values = {
3847
+ * string: {
3848
+ * min_len: 5
3849
+ * max_len: 20
3850
+ * }
3851
+ * }];
3852
+ * }
3853
+ * ```
3854
+ * Note that the `required` rule does not apply. Map values cannot be unset.
3855
+ *
3856
+ * @generated from field: optional buf.validate.FieldRules values = 5;
3857
+ */
3858
+ values?: FieldRules;
3859
+ };
3860
+
3861
+ /**
3862
+ * Describes the message buf.validate.MapRules.
3863
+ * Use `create(MapRulesSchema)` to create a new message.
3864
+ */
3865
+ export const MapRulesSchema: GenMessage<MapRules> = /*@__PURE__*/
3866
+ messageDesc(file_buf_validate_validate, 23);
3867
+
3868
+ /**
3869
+ * AnyRules describe rules applied exclusively to the `google.protobuf.Any` well-known type.
3870
+ *
3871
+ * @generated from message buf.validate.AnyRules
3872
+ */
3873
+ export type AnyRules = Message<"buf.validate.AnyRules"> & {
3874
+ /**
3875
+ * `in` requires the field's `type_url` to be equal to one of the
3876
+ * specified values. If it doesn't match any of the specified values, an error
3877
+ * message is generated.
3878
+ *
3879
+ * ```proto
3880
+ * message MyAny {
3881
+ * // The `value` field must have a `type_url` equal to one of the specified values.
3882
+ * google.protobuf.Any value = 1 [(buf.validate.field).any = {
3883
+ * in: ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]
3884
+ * }];
3885
+ * }
3886
+ * ```
3887
+ *
3888
+ * @generated from field: repeated string in = 2;
3889
+ */
3890
+ in: string[];
3891
+
3892
+ /**
3893
+ * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
3894
+ *
3895
+ * ```proto
3896
+ * message MyAny {
3897
+ * // The `value` field must not have a `type_url` equal to any of the specified values.
3898
+ * google.protobuf.Any value = 1 [(buf.validate.field).any = {
3899
+ * not_in: ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]
3900
+ * }];
3901
+ * }
3902
+ * ```
3903
+ *
3904
+ * @generated from field: repeated string not_in = 3;
3905
+ */
3906
+ notIn: string[];
3907
+ };
3908
+
3909
+ /**
3910
+ * Describes the message buf.validate.AnyRules.
3911
+ * Use `create(AnyRulesSchema)` to create a new message.
3912
+ */
3913
+ export const AnyRulesSchema: GenMessage<AnyRules> = /*@__PURE__*/
3914
+ messageDesc(file_buf_validate_validate, 24);
3915
+
3916
+ /**
3917
+ * DurationRules describe the rules applied exclusively to the `google.protobuf.Duration` well-known type.
3918
+ *
3919
+ * @generated from message buf.validate.DurationRules
3920
+ */
3921
+ export type DurationRules = Message<"buf.validate.DurationRules"> & {
3922
+ /**
3923
+ * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
3924
+ * If the field's value deviates from the specified value, an error message
3925
+ * will be generated.
3926
+ *
3927
+ * ```proto
3928
+ * message MyDuration {
3929
+ * // value must equal 5s
3930
+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
3931
+ * }
3932
+ * ```
3933
+ *
3934
+ * @generated from field: optional google.protobuf.Duration const = 2;
3935
+ */
3936
+ const?: Duration;
3937
+
3938
+ /**
3939
+ * @generated from oneof buf.validate.DurationRules.less_than
3940
+ */
3941
+ lessThan: {
3942
+ /**
3943
+ * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
3944
+ * exclusive. If the field's value is greater than or equal to the specified
3945
+ * value, an error message will be generated.
3946
+ *
3947
+ * ```proto
3948
+ * message MyDuration {
3949
+ * // value must be less than 5s
3950
+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
3951
+ * }
3952
+ * ```
3953
+ *
3954
+ * @generated from field: google.protobuf.Duration lt = 3;
3955
+ */
3956
+ value: Duration;
3957
+ case: "lt";
3958
+ } | {
3959
+ /**
3960
+ * `lte` indicates that the field must be less than or equal to the specified
3961
+ * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
3962
+ * an error message will be generated.
3963
+ *
3964
+ * ```proto
3965
+ * message MyDuration {
3966
+ * // value must be less than or equal to 10s
3967
+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
3968
+ * }
3969
+ * ```
3970
+ *
3971
+ * @generated from field: google.protobuf.Duration lte = 4;
3972
+ */
3973
+ value: Duration;
3974
+ case: "lte";
3975
+ } | { case: undefined; value?: undefined };
3976
+
3977
+ /**
3978
+ * @generated from oneof buf.validate.DurationRules.greater_than
3979
+ */
3980
+ greaterThan: {
3981
+ /**
3982
+ * `gt` requires the duration field value to be greater than the specified
3983
+ * value (exclusive). If the value of `gt` is larger than a specified `lt`
3984
+ * or `lte`, the range is reversed, and the field value must be outside the
3985
+ * specified range. If the field value doesn't meet the required conditions,
3986
+ * an error message is generated.
3987
+ *
3988
+ * ```proto
3989
+ * message MyDuration {
3990
+ * // duration must be greater than 5s [duration.gt]
3991
+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
3992
+ *
3993
+ * // duration must be greater than 5s and less than 10s [duration.gt_lt]
3994
+ * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
3995
+ *
3996
+ * // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
3997
+ * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
3998
+ * }
3999
+ * ```
4000
+ *
4001
+ * @generated from field: google.protobuf.Duration gt = 5;
4002
+ */
4003
+ value: Duration;
4004
+ case: "gt";
4005
+ } | {
4006
+ /**
4007
+ * `gte` requires the duration field value to be greater than or equal to the
4008
+ * specified value (exclusive). If the value of `gte` is larger than a
4009
+ * specified `lt` or `lte`, the range is reversed, and the field value must
4010
+ * be outside the specified range. If the field value doesn't meet the
4011
+ * required conditions, an error message is generated.
4012
+ *
4013
+ * ```proto
4014
+ * message MyDuration {
4015
+ * // duration must be greater than or equal to 5s [duration.gte]
4016
+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
4017
+ *
4018
+ * // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
4019
+ * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
4020
+ *
4021
+ * // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
4022
+ * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
4023
+ * }
4024
+ * ```
4025
+ *
4026
+ * @generated from field: google.protobuf.Duration gte = 6;
4027
+ */
4028
+ value: Duration;
4029
+ case: "gte";
4030
+ } | { case: undefined; value?: undefined };
4031
+
4032
+ /**
4033
+ * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
4034
+ * If the field's value doesn't correspond to any of the specified values,
4035
+ * an error message will be generated.
4036
+ *
4037
+ * ```proto
4038
+ * message MyDuration {
4039
+ * // value must be in list [1s, 2s, 3s]
4040
+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
4041
+ * }
4042
+ * ```
4043
+ *
4044
+ * @generated from field: repeated google.protobuf.Duration in = 7;
4045
+ */
4046
+ in: Duration[];
4047
+
4048
+ /**
4049
+ * `not_in` denotes that the field must not be equal to
4050
+ * any of the specified values of the `google.protobuf.Duration` type.
4051
+ * If the field's value matches any of these values, an error message will be
4052
+ * generated.
4053
+ *
4054
+ * ```proto
4055
+ * message MyDuration {
4056
+ * // value must not be in list [1s, 2s, 3s]
4057
+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
4058
+ * }
4059
+ * ```
4060
+ *
4061
+ * @generated from field: repeated google.protobuf.Duration not_in = 8;
4062
+ */
4063
+ notIn: Duration[];
4064
+
4065
+ /**
4066
+ * `example` specifies values that the field may have. These values SHOULD
4067
+ * conform to other rules. `example` values will not impact validation
4068
+ * but may be used as helpful guidance on how to populate the given field.
4069
+ *
4070
+ * ```proto
4071
+ * message MyDuration {
4072
+ * google.protobuf.Duration value = 1 [
4073
+ * (buf.validate.field).duration.example = { seconds: 1 },
4074
+ * (buf.validate.field).duration.example = { seconds: 2 },
4075
+ * ];
4076
+ * }
4077
+ * ```
4078
+ *
4079
+ * @generated from field: repeated google.protobuf.Duration example = 9;
4080
+ */
4081
+ example: Duration[];
4082
+ };
4083
+
4084
+ /**
4085
+ * Describes the message buf.validate.DurationRules.
4086
+ * Use `create(DurationRulesSchema)` to create a new message.
4087
+ */
4088
+ export const DurationRulesSchema: GenMessage<DurationRules> = /*@__PURE__*/
4089
+ messageDesc(file_buf_validate_validate, 25);
4090
+
4091
+ /**
4092
+ * TimestampRules describe the rules applied exclusively to the `google.protobuf.Timestamp` well-known type.
4093
+ *
4094
+ * @generated from message buf.validate.TimestampRules
4095
+ */
4096
+ export type TimestampRules = Message<"buf.validate.TimestampRules"> & {
4097
+ /**
4098
+ * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
4099
+ *
4100
+ * ```proto
4101
+ * message MyTimestamp {
4102
+ * // value must equal 2023-05-03T10:00:00Z
4103
+ * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
4104
+ * }
4105
+ * ```
4106
+ *
4107
+ * @generated from field: optional google.protobuf.Timestamp const = 2;
4108
+ */
4109
+ const?: Timestamp;
4110
+
4111
+ /**
4112
+ * @generated from oneof buf.validate.TimestampRules.less_than
4113
+ */
4114
+ lessThan: {
4115
+ /**
4116
+ * requires the duration field value to be less than the specified value (field < value). If the field value doesn't meet the required conditions, an error message is generated.
4117
+ *
4118
+ * ```proto
4119
+ * message MyDuration {
4120
+ * // duration must be less than 'P3D' [duration.lt]
4121
+ * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
4122
+ * }
4123
+ * ```
4124
+ *
4125
+ * @generated from field: google.protobuf.Timestamp lt = 3;
4126
+ */
4127
+ value: Timestamp;
4128
+ case: "lt";
4129
+ } | {
4130
+ /**
4131
+ * requires the timestamp field value to be less than or equal to the specified value (field <= value). If the field value doesn't meet the required conditions, an error message is generated.
4132
+ *
4133
+ * ```proto
4134
+ * message MyTimestamp {
4135
+ * // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
4136
+ * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
4137
+ * }
4138
+ * ```
4139
+ *
4140
+ * @generated from field: google.protobuf.Timestamp lte = 4;
4141
+ */
4142
+ value: Timestamp;
4143
+ case: "lte";
4144
+ } | {
4145
+ /**
4146
+ * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.
4147
+ *
4148
+ * ```proto
4149
+ * message MyTimestamp {
4150
+ * // value must be less than now
4151
+ * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];
4152
+ * }
4153
+ * ```
4154
+ *
4155
+ * @generated from field: bool lt_now = 7;
4156
+ */
4157
+ value: boolean;
4158
+ case: "ltNow";
4159
+ } | { case: undefined; value?: undefined };
4160
+
4161
+ /**
4162
+ * @generated from oneof buf.validate.TimestampRules.greater_than
4163
+ */
4164
+ greaterThan: {
4165
+ /**
4166
+ * `gt` requires the timestamp field value to be greater than the specified
4167
+ * value (exclusive). If the value of `gt` is larger than a specified `lt`
4168
+ * or `lte`, the range is reversed, and the field value must be outside the
4169
+ * specified range. If the field value doesn't meet the required conditions,
4170
+ * an error message is generated.
4171
+ *
4172
+ * ```proto
4173
+ * message MyTimestamp {
4174
+ * // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
4175
+ * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
4176
+ *
4177
+ * // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
4178
+ * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
4179
+ *
4180
+ * // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
4181
+ * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
4182
+ * }
4183
+ * ```
4184
+ *
4185
+ * @generated from field: google.protobuf.Timestamp gt = 5;
4186
+ */
4187
+ value: Timestamp;
4188
+ case: "gt";
4189
+ } | {
4190
+ /**
4191
+ * `gte` requires the timestamp field value to be greater than or equal to the
4192
+ * specified value (exclusive). If the value of `gte` is larger than a
4193
+ * specified `lt` or `lte`, the range is reversed, and the field value
4194
+ * must be outside the specified range. If the field value doesn't meet
4195
+ * the required conditions, an error message is generated.
4196
+ *
4197
+ * ```proto
4198
+ * message MyTimestamp {
4199
+ * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
4200
+ * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
4201
+ *
4202
+ * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
4203
+ * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
4204
+ *
4205
+ * // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
4206
+ * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
4207
+ * }
4208
+ * ```
4209
+ *
4210
+ * @generated from field: google.protobuf.Timestamp gte = 6;
4211
+ */
4212
+ value: Timestamp;
4213
+ case: "gte";
4214
+ } | {
4215
+ /**
4216
+ * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.
4217
+ *
4218
+ * ```proto
4219
+ * message MyTimestamp {
4220
+ * // value must be greater than now
4221
+ * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];
4222
+ * }
4223
+ * ```
4224
+ *
4225
+ * @generated from field: bool gt_now = 8;
4226
+ */
4227
+ value: boolean;
4228
+ case: "gtNow";
4229
+ } | { case: undefined; value?: undefined };
4230
+
4231
+ /**
4232
+ * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
4233
+ *
4234
+ * ```proto
4235
+ * message MyTimestamp {
4236
+ * // value must be within 1 hour of now
4237
+ * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
4238
+ * }
4239
+ * ```
4240
+ *
4241
+ * @generated from field: optional google.protobuf.Duration within = 9;
4242
+ */
4243
+ within?: Duration;
4244
+
4245
+ /**
4246
+ * `example` specifies values that the field may have. These values SHOULD
4247
+ * conform to other rules. `example` values will not impact validation
4248
+ * but may be used as helpful guidance on how to populate the given field.
4249
+ *
4250
+ * ```proto
4251
+ * message MyTimestamp {
4252
+ * google.protobuf.Timestamp value = 1 [
4253
+ * (buf.validate.field).timestamp.example = { seconds: 1672444800 },
4254
+ * (buf.validate.field).timestamp.example = { seconds: 1672531200 },
4255
+ * ];
4256
+ * }
4257
+ * ```
4258
+ *
4259
+ * @generated from field: repeated google.protobuf.Timestamp example = 10;
4260
+ */
4261
+ example: Timestamp[];
4262
+ };
4263
+
4264
+ /**
4265
+ * Describes the message buf.validate.TimestampRules.
4266
+ * Use `create(TimestampRulesSchema)` to create a new message.
4267
+ */
4268
+ export const TimestampRulesSchema: GenMessage<TimestampRules> = /*@__PURE__*/
4269
+ messageDesc(file_buf_validate_validate, 26);
4270
+
4271
+ /**
4272
+ * `Violations` is a collection of `Violation` messages. This message type is returned by
4273
+ * Protovalidate when a proto message fails to meet the requirements set by the `Rule` validation rules.
4274
+ * Each individual violation is represented by a `Violation` message.
4275
+ *
4276
+ * @generated from message buf.validate.Violations
4277
+ */
4278
+ export type Violations = Message<"buf.validate.Violations"> & {
4279
+ /**
4280
+ * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
4281
+ *
4282
+ * @generated from field: repeated buf.validate.Violation violations = 1;
4283
+ */
4284
+ violations: Violation[];
4285
+ };
4286
+
4287
+ /**
4288
+ * Describes the message buf.validate.Violations.
4289
+ * Use `create(ViolationsSchema)` to create a new message.
4290
+ */
4291
+ export const ViolationsSchema: GenMessage<Violations> = /*@__PURE__*/
4292
+ messageDesc(file_buf_validate_validate, 27);
4293
+
4294
+ /**
4295
+ * `Violation` represents a single instance where a validation rule, expressed
4296
+ * as a `Rule`, was not met. It provides information about the field that
4297
+ * caused the violation, the specific rule that wasn't fulfilled, and a
4298
+ * human-readable error message.
4299
+ *
4300
+ * For example, consider the following message:
4301
+ *
4302
+ * ```proto
4303
+ * message User {
4304
+ * int32 age = 1 [(buf.validate.field).cel = {
4305
+ * id: "user.age",
4306
+ * expression: "this < 18 ? 'User must be at least 18 years old' : ''",
4307
+ * }];
4308
+ * }
4309
+ * ```
4310
+ *
4311
+ * It could produce the following violation:
4312
+ *
4313
+ * ```json
4314
+ * {
4315
+ * "ruleId": "user.age",
4316
+ * "message": "User must be at least 18 years old",
4317
+ * "field": {
4318
+ * "elements": [
4319
+ * {
4320
+ * "fieldNumber": 1,
4321
+ * "fieldName": "age",
4322
+ * "fieldType": "TYPE_INT32"
4323
+ * }
4324
+ * ]
4325
+ * },
4326
+ * "rule": {
4327
+ * "elements": [
4328
+ * {
4329
+ * "fieldNumber": 23,
4330
+ * "fieldName": "cel",
4331
+ * "fieldType": "TYPE_MESSAGE",
4332
+ * "index": "0"
4333
+ * }
4334
+ * ]
4335
+ * }
4336
+ * }
4337
+ * ```
4338
+ *
4339
+ * @generated from message buf.validate.Violation
4340
+ */
4341
+ export type Violation = Message<"buf.validate.Violation"> & {
4342
+ /**
4343
+ * `field` is a machine-readable path to the field that failed validation.
4344
+ * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.
4345
+ *
4346
+ * For example, consider the following message:
4347
+ *
4348
+ * ```proto
4349
+ * message Message {
4350
+ * bool a = 1 [(buf.validate.field).required = true];
4351
+ * }
4352
+ * ```
4353
+ *
4354
+ * It could produce the following violation:
4355
+ *
4356
+ * ```textproto
4357
+ * violation {
4358
+ * field { element { field_number: 1, field_name: "a", field_type: 8 } }
4359
+ * ...
4360
+ * }
4361
+ * ```
4362
+ *
4363
+ * @generated from field: optional buf.validate.FieldPath field = 5;
4364
+ */
4365
+ field?: FieldPath;
4366
+
4367
+ /**
4368
+ * `rule` is a machine-readable path that points to the specific rule that failed validation.
4369
+ * This will be a nested field starting from the FieldRules of the field that failed validation.
4370
+ * For custom rules, this will provide the path of the rule, e.g. `cel[0]`.
4371
+ *
4372
+ * For example, consider the following message:
4373
+ *
4374
+ * ```proto
4375
+ * message Message {
4376
+ * bool a = 1 [(buf.validate.field).required = true];
4377
+ * bool b = 2 [(buf.validate.field).cel = {
4378
+ * id: "custom_rule",
4379
+ * expression: "!this ? 'b must be true': ''"
4380
+ * }]
4381
+ * }
4382
+ * ```
4383
+ *
4384
+ * It could produce the following violations:
4385
+ *
4386
+ * ```textproto
4387
+ * violation {
4388
+ * rule { element { field_number: 25, field_name: "required", field_type: 8 } }
4389
+ * ...
4390
+ * }
4391
+ * violation {
4392
+ * rule { element { field_number: 23, field_name: "cel", field_type: 11, index: 0 } }
4393
+ * ...
4394
+ * }
4395
+ * ```
4396
+ *
4397
+ * @generated from field: optional buf.validate.FieldPath rule = 6;
4398
+ */
4399
+ rule?: FieldPath;
4400
+
4401
+ /**
4402
+ * `rule_id` is the unique identifier of the `Rule` that was not fulfilled.
4403
+ * This is the same `id` that was specified in the `Rule` message, allowing easy tracing of which rule was violated.
4404
+ *
4405
+ * @generated from field: optional string rule_id = 2;
4406
+ */
4407
+ ruleId: string;
4408
+
4409
+ /**
4410
+ * `message` is a human-readable error message that describes the nature of the violation.
4411
+ * This can be the default error message from the violated `Rule`, or it can be a custom message that gives more context about the violation.
4412
+ *
4413
+ * @generated from field: optional string message = 3;
4414
+ */
4415
+ message: string;
4416
+
4417
+ /**
4418
+ * `for_key` indicates whether the violation was caused by a map key, rather than a value.
4419
+ *
4420
+ * @generated from field: optional bool for_key = 4;
4421
+ */
4422
+ forKey: boolean;
4423
+ };
4424
+
4425
+ /**
4426
+ * Describes the message buf.validate.Violation.
4427
+ * Use `create(ViolationSchema)` to create a new message.
4428
+ */
4429
+ export const ViolationSchema: GenMessage<Violation> = /*@__PURE__*/
4430
+ messageDesc(file_buf_validate_validate, 28);
4431
+
4432
+ /**
4433
+ * `FieldPath` provides a path to a nested protobuf field.
4434
+ *
4435
+ * This message provides enough information to render a dotted field path even without protobuf descriptors.
4436
+ * It also provides enough information to resolve a nested field through unknown wire data.
4437
+ *
4438
+ * @generated from message buf.validate.FieldPath
4439
+ */
4440
+ export type FieldPath = Message<"buf.validate.FieldPath"> & {
4441
+ /**
4442
+ * `elements` contains each element of the path, starting from the root and recursing downward.
4443
+ *
4444
+ * @generated from field: repeated buf.validate.FieldPathElement elements = 1;
4445
+ */
4446
+ elements: FieldPathElement[];
4447
+ };
4448
+
4449
+ /**
4450
+ * Describes the message buf.validate.FieldPath.
4451
+ * Use `create(FieldPathSchema)` to create a new message.
4452
+ */
4453
+ export const FieldPathSchema: GenMessage<FieldPath> = /*@__PURE__*/
4454
+ messageDesc(file_buf_validate_validate, 29);
4455
+
4456
+ /**
4457
+ * `FieldPathElement` provides enough information to nest through a single protobuf field.
4458
+ *
4459
+ * If the selected field is a map or repeated field, the `subscript` value selects a specific element from it.
4460
+ * A path that refers to a value nested under a map key or repeated field index will have a `subscript` value.
4461
+ * The `field_type` field allows unambiguous resolution of a field even if descriptors are not available.
4462
+ *
4463
+ * @generated from message buf.validate.FieldPathElement
4464
+ */
4465
+ export type FieldPathElement = Message<"buf.validate.FieldPathElement"> & {
4466
+ /**
4467
+ * `field_number` is the field number this path element refers to.
4468
+ *
4469
+ * @generated from field: optional int32 field_number = 1;
4470
+ */
4471
+ fieldNumber: number;
4472
+
4473
+ /**
4474
+ * `field_name` contains the field name this path element refers to.
4475
+ * This can be used to display a human-readable path even if the field number is unknown.
4476
+ *
4477
+ * @generated from field: optional string field_name = 2;
4478
+ */
4479
+ fieldName: string;
4480
+
4481
+ /**
4482
+ * `field_type` specifies the type of this field. When using reflection, this value is not needed.
4483
+ *
4484
+ * This value is provided to make it possible to traverse unknown fields through wire data.
4485
+ * When traversing wire data, be mindful of both packed[1] and delimited[2] encoding schemes.
4486
+ *
4487
+ * [1]: https://protobuf.dev/programming-guides/encoding/#packed
4488
+ * [2]: https://protobuf.dev/programming-guides/encoding/#groups
4489
+ *
4490
+ * N.B.: Although groups are deprecated, the corresponding delimited encoding scheme is not, and
4491
+ * can be explicitly used in Protocol Buffers 2023 Edition.
4492
+ *
4493
+ * @generated from field: optional google.protobuf.FieldDescriptorProto.Type field_type = 3;
4494
+ */
4495
+ fieldType: FieldDescriptorProto_Type;
4496
+
4497
+ /**
4498
+ * `key_type` specifies the map key type of this field. This value is useful when traversing
4499
+ * unknown fields through wire data: specifically, it allows handling the differences between
4500
+ * different integer encodings.
4501
+ *
4502
+ * @generated from field: optional google.protobuf.FieldDescriptorProto.Type key_type = 4;
4503
+ */
4504
+ keyType: FieldDescriptorProto_Type;
4505
+
4506
+ /**
4507
+ * `value_type` specifies map value type of this field. This is useful if you want to display a
4508
+ * value inside unknown fields through wire data.
4509
+ *
4510
+ * @generated from field: optional google.protobuf.FieldDescriptorProto.Type value_type = 5;
4511
+ */
4512
+ valueType: FieldDescriptorProto_Type;
4513
+
4514
+ /**
4515
+ * `subscript` contains a repeated index or map key, if this path element nests into a repeated or map field.
4516
+ *
4517
+ * @generated from oneof buf.validate.FieldPathElement.subscript
4518
+ */
4519
+ subscript: {
4520
+ /**
4521
+ * `index` specifies a 0-based index into a repeated field.
4522
+ *
4523
+ * @generated from field: uint64 index = 6;
4524
+ */
4525
+ value: bigint;
4526
+ case: "index";
4527
+ } | {
4528
+ /**
4529
+ * `bool_key` specifies a map key of type bool.
4530
+ *
4531
+ * @generated from field: bool bool_key = 7;
4532
+ */
4533
+ value: boolean;
4534
+ case: "boolKey";
4535
+ } | {
4536
+ /**
4537
+ * `int_key` specifies a map key of type int32, int64, sint32, sint64, sfixed32 or sfixed64.
4538
+ *
4539
+ * @generated from field: int64 int_key = 8;
4540
+ */
4541
+ value: bigint;
4542
+ case: "intKey";
4543
+ } | {
4544
+ /**
4545
+ * `uint_key` specifies a map key of type uint32, uint64, fixed32 or fixed64.
4546
+ *
4547
+ * @generated from field: uint64 uint_key = 9;
4548
+ */
4549
+ value: bigint;
4550
+ case: "uintKey";
4551
+ } | {
4552
+ /**
4553
+ * `string_key` specifies a map key of type string.
4554
+ *
4555
+ * @generated from field: string string_key = 10;
4556
+ */
4557
+ value: string;
4558
+ case: "stringKey";
4559
+ } | { case: undefined; value?: undefined };
4560
+ };
4561
+
4562
+ /**
4563
+ * Describes the message buf.validate.FieldPathElement.
4564
+ * Use `create(FieldPathElementSchema)` to create a new message.
4565
+ */
4566
+ export const FieldPathElementSchema: GenMessage<FieldPathElement> = /*@__PURE__*/
4567
+ messageDesc(file_buf_validate_validate, 30);
4568
+
4569
+ /**
4570
+ * Specifies how `FieldRules.ignore` behaves, depending on the field's value, and
4571
+ * whether the field tracks presence.
4572
+ *
4573
+ * @generated from enum buf.validate.Ignore
4574
+ */
4575
+ export enum Ignore {
4576
+ /**
4577
+ * Ignore rules if the field tracks presence and is unset. This is the default
4578
+ * behavior.
4579
+ *
4580
+ * In proto3, only message fields, members of a Protobuf `oneof`, and fields
4581
+ * with the `optional` label track presence. Consequently, the following fields
4582
+ * are always validated, whether a value is set or not:
4583
+ *
4584
+ * ```proto
4585
+ * syntax="proto3";
4586
+ *
4587
+ * message RulesApply {
4588
+ * string email = 1 [
4589
+ * (buf.validate.field).string.email = true
4590
+ * ];
4591
+ * int32 age = 2 [
4592
+ * (buf.validate.field).int32.gt = 0
4593
+ * ];
4594
+ * repeated string labels = 3 [
4595
+ * (buf.validate.field).repeated.min_items = 1
4596
+ * ];
4597
+ * }
4598
+ * ```
4599
+ *
4600
+ * In contrast, the following fields track presence, and are only validated if
4601
+ * a value is set:
4602
+ *
4603
+ * ```proto
4604
+ * syntax="proto3";
4605
+ *
4606
+ * message RulesApplyIfSet {
4607
+ * optional string email = 1 [
4608
+ * (buf.validate.field).string.email = true
4609
+ * ];
4610
+ * oneof ref {
4611
+ * string reference = 2 [
4612
+ * (buf.validate.field).string.uuid = true
4613
+ * ];
4614
+ * string name = 3 [
4615
+ * (buf.validate.field).string.min_len = 4
4616
+ * ];
4617
+ * }
4618
+ * SomeMessage msg = 4 [
4619
+ * (buf.validate.field).cel = {/* ... *\/}
4620
+ * ];
4621
+ * }
4622
+ * ```
4623
+ *
4624
+ * To ensure that such a field is set, add the `required` rule.
4625
+ *
4626
+ * To learn which fields track presence, see the
4627
+ * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).
4628
+ *
4629
+ * @generated from enum value: IGNORE_UNSPECIFIED = 0;
4630
+ */
4631
+ UNSPECIFIED = 0,
4632
+
4633
+ /**
4634
+ * Ignore rules if the field is unset, or set to the zero value.
4635
+ *
4636
+ * The zero value depends on the field type:
4637
+ * - For strings, the zero value is the empty string.
4638
+ * - For bytes, the zero value is empty bytes.
4639
+ * - For bool, the zero value is false.
4640
+ * - For numeric types, the zero value is zero.
4641
+ * - For enums, the zero value is the first defined enum value.
4642
+ * - For repeated fields, the zero is an empty list.
4643
+ * - For map fields, the zero is an empty map.
4644
+ * - For message fields, absence of the message (typically a null-value) is considered zero value.
4645
+ *
4646
+ * For fields that track presence (e.g. adding the `optional` label in proto3),
4647
+ * this a no-op and behavior is the same as the default `IGNORE_UNSPECIFIED`.
4648
+ *
4649
+ * @generated from enum value: IGNORE_IF_ZERO_VALUE = 1;
4650
+ */
4651
+ IF_ZERO_VALUE = 1,
4652
+
4653
+ /**
4654
+ * Always ignore rules, including the `required` rule.
4655
+ *
4656
+ * This is useful for ignoring the rules of a referenced message, or to
4657
+ * temporarily ignore rules during development.
4658
+ *
4659
+ * ```proto
4660
+ * message MyMessage {
4661
+ * // The field's rules will always be ignored, including any validations
4662
+ * // on value's fields.
4663
+ * MyOtherMessage value = 1 [
4664
+ * (buf.validate.field).ignore = IGNORE_ALWAYS
4665
+ * ];
4666
+ * }
4667
+ * ```
4668
+ *
4669
+ * @generated from enum value: IGNORE_ALWAYS = 3;
4670
+ */
4671
+ ALWAYS = 3,
4672
+ }
4673
+
4674
+ /**
4675
+ * Describes the enum buf.validate.Ignore.
4676
+ */
4677
+ export const IgnoreSchema: GenEnum<Ignore> = /*@__PURE__*/
4678
+ enumDesc(file_buf_validate_validate, 0);
4679
+
4680
+ /**
4681
+ * KnownRegex contains some well-known patterns.
4682
+ *
4683
+ * @generated from enum buf.validate.KnownRegex
4684
+ */
4685
+ export enum KnownRegex {
4686
+ /**
4687
+ * @generated from enum value: KNOWN_REGEX_UNSPECIFIED = 0;
4688
+ */
4689
+ UNSPECIFIED = 0,
4690
+
4691
+ /**
4692
+ * HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2).
4693
+ *
4694
+ * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_NAME = 1;
4695
+ */
4696
+ HTTP_HEADER_NAME = 1,
4697
+
4698
+ /**
4699
+ * HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4).
4700
+ *
4701
+ * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_VALUE = 2;
4702
+ */
4703
+ HTTP_HEADER_VALUE = 2,
4704
+ }
4705
+
4706
+ /**
4707
+ * Describes the enum buf.validate.KnownRegex.
4708
+ */
4709
+ export const KnownRegexSchema: GenEnum<KnownRegex> = /*@__PURE__*/
4710
+ enumDesc(file_buf_validate_validate, 1);
4711
+
4712
+ /**
4713
+ * Rules specify the validations to be performed on this message. By default,
4714
+ * no validation is performed against a message.
4715
+ *
4716
+ * @generated from extension: optional buf.validate.MessageRules message = 1159;
4717
+ */
4718
+ export const message: GenExtension<MessageOptions, MessageRules> = /*@__PURE__*/
4719
+ extDesc(file_buf_validate_validate, 0);
4720
+
4721
+ /**
4722
+ * Rules specify the validations to be performed on this oneof. By default,
4723
+ * no validation is performed against a oneof.
4724
+ *
4725
+ * @generated from extension: optional buf.validate.OneofRules oneof = 1159;
4726
+ */
4727
+ export const oneof: GenExtension<OneofOptions, OneofRules> = /*@__PURE__*/
4728
+ extDesc(file_buf_validate_validate, 1);
4729
+
4730
+ /**
4731
+ * Rules specify the validations to be performed on this field. By default,
4732
+ * no validation is performed against a field.
4733
+ *
4734
+ * @generated from extension: optional buf.validate.FieldRules field = 1159;
4735
+ */
4736
+ export const field: GenExtension<FieldOptions, FieldRules> = /*@__PURE__*/
4737
+ extDesc(file_buf_validate_validate, 2);
4738
+
4739
+ /**
4740
+ * Specifies predefined rules. When extending a standard rule message,
4741
+ * this adds additional CEL expressions that apply when the extension is used.
4742
+ *
4743
+ * ```proto
4744
+ * extend buf.validate.Int32Rules {
4745
+ * bool is_zero [(buf.validate.predefined).cel = {
4746
+ * id: "int32.is_zero",
4747
+ * message: "value must be zero",
4748
+ * expression: "!rule || this == 0",
4749
+ * }];
4750
+ * }
4751
+ *
4752
+ * message Foo {
4753
+ * int32 reserved = 1 [(buf.validate.field).int32.(is_zero) = true];
4754
+ * }
4755
+ * ```
4756
+ *
4757
+ * @generated from extension: optional buf.validate.PredefinedRules predefined = 1160;
4758
+ */
4759
+ export const predefined: GenExtension<FieldOptions, PredefinedRules> = /*@__PURE__*/
4760
+ extDesc(file_buf_validate_validate, 3);
4761
+